Commit 022962b1c11159fec0f939b58cd9dfdd96fe52ca

Authored by Nikita Kulshreshtha
2 parents fd2f03cd 528471bd

Merge branch 'Develop' of http://gitlab.ebix.com/ADAM/AIAHTML5 into QA

Showing 28 changed files with 4540 additions and 314 deletions
400-SOURCECODE/AIAHTML5+FlexCB/AppStartup.mxml 0 → 100644
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<mx:Application implements="com.adam.aia.IAppBase,com.magic.mvc.container.IMVCContainer"
  3 + xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:kapit="fr.kapit.*"
  4 + xmlns:controller="com.adam.aia.appstartup.controller.*"
  5 + width="100%" height="100%" layout="absolute"
  6 + backgroundColor="#000000"
  7 + preinitialize="executePreinitializationTasks()"
  8 + creationComplete="onCreationComplete();"
  9 + verticalScrollPolicy="off" horizontalScrollPolicy="off">
  10 + <!--<kapit:KapInspect />-->
  11 + <mx:Script>
  12 + <![CDATA[
  13 + import com.adam.aia.CommonUtil;
  14 + import com.adam.aia.IAppBase;
  15 + import com.adam.aia.appstartup.event.StartupEventConst;
  16 + import com.adam.aia.appstartup.model.UserContextVO;
  17 + import com.adam.aia.appstartup.util.StartupOSTConst;
  18 + import com.adam.aia.appstartup.view.LoginView;
  19 + import com.adobe.cairngorm.business.ServiceLocator;
  20 + import com.adobe.cairngorm.events.UMEvent;
  21 + import com.magic.flexmdi.manager.MDIModuleWindowManager;
  22 + import com.magic.mvc.container.IMVCContainer;
  23 + import com.magic.mvc.container.MVCVBox;
  24 + import com.magic.mvc.context.IMVCContext;
  25 + import com.magic.mvc.context.MVCContextManager;
  26 + import com.magic.util.LocaleManager;
  27 + import com.magic.util.OSTManager;
  28 + import com.magic.util.UriUtil;
  29 + import com.magic.util.cache.CacheManager;
  30 +
  31 + import mx.controls.Alert;
  32 + import mx.controls.ProgressBar;
  33 + import mx.controls.SWFLoader;
  34 + import mx.events.FlexEvent;
  35 + import mx.managers.BrowserManager;
  36 + import mx.managers.SystemManager;
  37 + //import fr.kapit.KapInspect;
  38 +
  39 + public const LOGIN_SUCCESS:String = "LoginSuccess";
  40 + public const LOAD_LOGIN_APP:String = "LoadLoginApp";
  41 + public const LOAD_ADMIN_APP:String = "LoadAdminApp";
  42 + public const LOAD_MAIN_APP:String = "LoadContainerApp";
  43 + public const GET_USER_CONTEXT:String = "GetUserContext";
  44 +
  45 + private const APP_ADMIN:String = "AppAdmin.swf";
  46 + private const APP_MAIN:String = "AppMain.swf";
  47 + private const APP_STARTUP:String = "AppStartup.swf";
  48 + private const LOCALE_XML:String = "locale.xml";
  49 +
  50 +
  51 + import com.adam.pattern.Request;
  52 + import com.adam.pattern.Response;
  53 + import com.adam.aia.appstartup.business.AppStartupConst;
  54 + import com.adam.aia.appstartup.business.StartupRemoteDelegate;
  55 + import com.adam.aia.appstartup.business.StartupRemoteDelegate;
  56 +
  57 + //******************************************************
  58 + // Public properties
  59 + //******************************************************
  60 +
  61 + private var _objSwfLoader:SWFLoader;
  62 + private var _objProgressBar:ProgressBar;
  63 +
  64 + private const APPSTARTUP_OST_XML:String = "appstartup_ost.xml";
  65 + private const CONTENT_PATH:String = "content_path";
  66 + private const PATH_SEPARATOR:String="/";
  67 +
  68 +
  69 + public var _cmpLoginView:LoginView;
  70 +
  71 + public var objGlobalUserContext:UserContextVO = new UserContextVO();
  72 +
  73 +
  74 +
  75 + /**
  76 + * Override of initialized method to defer application initialization
  77 + * finish until AFTER the runtime style has been loaded
  78 + *
  79 + * @param value Has the UIComponent/application been initialized
  80 + */
  81 + override public function set initialized(value:Boolean):void
  82 + {
  83 + // Hold off until the Runtime CSS SWF is done loading.
  84 + }
  85 +
  86 + /**
  87 + * This function is responsible for invoking task which needed to be done before initialization.
  88 + * Basically the initialize the LocaleManager with the locale info.
  89 + *
  90 + */
  91 + private function executePreinitializationTasks():void
  92 + {
  93 + //new KapInspect();
  94 +
  95 + setupMVCContextManager();
  96 + // just for the sake of initializing this first
  97 + ServiceLocator.getInstance();
  98 + MDIModuleWindowManager.getInstance();
  99 + MVCContextManager.getInstance();
  100 +
  101 + LocaleManager.getInstance().addEventListener(Event.COMPLETE,onLocale);
  102 + LocaleManager.getInstance().load(UriUtil.getAbsoluteUriFromApplication(LOCALE_XML));
  103 + }
  104 +
  105 + /**
  106 + * Once the locale xml is loaded and initialized the proceed
  107 + *
  108 + */
  109 + private function onLocale(objEvent:Event):void
  110 + {
  111 + super.initialized = true;
  112 + }
  113 +
  114 + /**
  115 + * Function implementation for IAppBase.doAction()
  116 + * This is the only window to the AppBase any call should be made through this only
  117 + */
  118 + public function doAction(strActionId:String, ...args):*
  119 + {
  120 + BrowserManager.getInstance().init("","A.D.A.M. Interactive Anatomy");
  121 + //displayError
  122 + switch(strActionId)
  123 + {
  124 + case LOGIN_SUCCESS:
  125 + loadApp(UriUtil.getAbsoluteUriFromApplication(APP_MAIN));
  126 + break;
  127 + case LOAD_ADMIN_APP:
  128 + loadApp(UriUtil.getAbsoluteUriFromApplication(APP_ADMIN));
  129 + break;
  130 + case LOAD_LOGIN_APP:
  131 + loadLoginView();
  132 + break;
  133 + case GET_USER_CONTEXT:
  134 + return objGlobalUserContext;
  135 + break;
  136 + }
  137 + }
  138 +
  139 + /**
  140 + * function to load an application swf. creates a new swf load instance and loads the application in that.
  141 + * if there is already another application running then it will first unload that
  142 + * @param : strPath - uri to the application swf that needs to be loaded
  143 + * @return : void
  144 + */
  145 + private function loadApp(strPath:String):void
  146 + {
  147 + unloadApp();
  148 + var objLoadContext:LoaderContext = new LoaderContext(false,
  149 + ApplicationDomain.currentDomain);
  150 + _objSwfLoader = new SWFLoader();
  151 + _objSwfLoader.visible = false;
  152 + _objSwfLoader.percentHeight = 100;
  153 + _objSwfLoader.percentWidth = 100;
  154 + _objSwfLoader.showBusyCursor = true;
  155 + _objSwfLoader.addEventListener(Event.COMPLETE, onAppLoadComplete);
  156 + _objSwfLoader.addEventListener(IOErrorEvent.IO_ERROR,
  157 + onAppLoadIOError);
  158 + _objSwfLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR,
  159 + onAppLoadSecurityError);
  160 + _objProgressBar = CommonUtil.getProgressBar(this, _objSwfLoader, CommonUtil.APP_LOADER_STRING);
  161 + /*
  162 + _objProgressBar.width = 300;
  163 + _objProgressBar.x = (width-300)/2;
  164 + _objProgressBar.y = (height)/2;
  165 + _objProgressBar.mode = "pool";
  166 + _objProgressBar.label = APP_LOADER_STRING;
  167 + _objProgressBar.source = _objSwfLoader;
  168 + */
  169 + addChild(_objSwfLoader);
  170 + //addChild(_objProgressBar);
  171 + _objSwfLoader.loaderContext = objLoadContext;
  172 + _objSwfLoader.source = strPath;
  173 +
  174 + }
  175 +
  176 + private function setupMVCContextManager():void
  177 + {
  178 + MVCContextManager.getInstance().flush();
  179 + //register Global MVC context
  180 + MVCContextManager.getInstance().createGlobalContext(
  181 + _objModelLocator,
  182 + _objViewLocator,
  183 + _objFrontController);
  184 + }
  185 + /**
  186 + * unloads the currently loaded application.
  187 + * @param : none
  188 + * @return : void
  189 + */
  190 + private function unloadApp():void
  191 + {
  192 + unloadLoginView();
  193 + if(_objSwfLoader != null)
  194 + {
  195 +
  196 + cleanupApplication();
  197 + MDIModuleWindowManager.getInstance().flush();
  198 + MVCContextManager.getInstance().flush();
  199 + com.magic.util.CacheManager.getInstance().flush();
  200 + com.magic.util.cache.CacheManager.getInstance().dispose();
  201 + _objSwfLoader.source = null;
  202 + removeChild(_objSwfLoader);
  203 + _objSwfLoader = null;
  204 +
  205 + }
  206 + }
  207 +
  208 + /**
  209 + * This function retrieves the loaded application and invokes its prepareToUnload function.
  210 + *
  211 + * @param none
  212 + * @return none
  213 + */
  214 + private function cleanupApplication():void
  215 + {
  216 + if(_objSwfLoader.content == null)
  217 + {
  218 + return;
  219 + }
  220 + //
  221 + var objSystemManager:SystemManager = SystemManager(_objSwfLoader.content);
  222 + if(objSystemManager && objSystemManager.application)
  223 + {
  224 + var objApplication:Object = Object(objSystemManager.application);
  225 + if(objApplication.hasOwnProperty("prepareToUnload"))
  226 + {
  227 + objApplication["prepareToUnload"]()
  228 + }
  229 + }
  230 + }
  231 + /**
  232 + * event handler on application swf load complete. Remove the progress bar.
  233 + * @param : objEvent
  234 + * @return : void
  235 + */
  236 + private function onAppLoadComplete(objEvent:Event):void
  237 + {
  238 + if(_objProgressBar != null && _objSwfLoader != null)
  239 + {
  240 + _objSwfLoader.showBusyCursor = false;
  241 + _objSwfLoader.visible = true;
  242 + removeChild(_objProgressBar);
  243 + _objProgressBar = null;
  244 + }
  245 + }
  246 +
  247 + /**
  248 + * Event handler of input/output error. prompt the error message to the user.
  249 + * @param : none
  250 + * @return : void
  251 + */
  252 + private function onAppLoadIOError(objEvent:IOErrorEvent):void
  253 + {
  254 + // display error message
  255 + }
  256 +
  257 + /**
  258 + * Event handler of security error. prompt the error message to the user.
  259 + * @param : none
  260 + * @return : void
  261 + */
  262 + private function onAppLoadSecurityError(objEvent:SecurityErrorEvent):void
  263 + {
  264 + // display error message
  265 + }
  266 +
  267 + /**
  268 + * function to load AppStartup.swf on creationComplete event
  269 + * @param : none
  270 + * @return : void
  271 + */
  272 + private function onCreationComplete():void
  273 + {
  274 + // systemManager.addEventListener(FlexEvent.IDLE, handleApplicationIdle);
  275 + //NIKITA 25July18
  276 + //doAction(LOAD_LOGIN_APP);
  277 + var un:String = mx.core.Application.application.parameters.username;
  278 + var up:String = mx.core.Application.application.parameters.password;
  279 +
  280 + //Alert.show(un+", "+up);
  281 + //Encryption of the password for more security
  282 + /*var saltValue:String = 'A1B2C3D4E5F6G7H8I9';
  283 + var password:String = event.data.password + saltValue;
  284 + var sha1:SHA1 = new SHA1();
  285 + var src:ByteArray = new ByteArray();
  286 + src.writeUTFBytes(password);
  287 + var digest:ByteArray = sha1.hash(src);
  288 + var passwordHash:String = Hex.fromArray(digest);*/
  289 +
  290 + var objData:Object = new Object();
  291 + objData.loginId = un;
  292 + objData.password = up;
  293 +
  294 + var objEvent:UMEvent = new UMEvent(StartupEventConst.EVENT_LOGIN_CLICK,null,true,false,objData);
  295 + objEvent.dispatch();
  296 +
  297 + // doAction(LOGIN_SUCCESS);
  298 + //25July18
  299 +
  300 + //loadApp(UriUtil.getAbsoluteUriFromApplication(APP_STARTUP));
  301 + }
  302 + private function handleApplicationIdle(event:FlexEvent):void
  303 + {
  304 + //Alert.show("IDLE");
  305 + if(event.currentTarget.mx_internal::idleCounter == 480){
  306 + Alert.show("Time out happened");
  307 + ExternalInterface.call("setUserIdleValue");
  308 + }
  309 + }
  310 + private function loadLoginView():void
  311 + {
  312 + unloadApp();
  313 + if(_cmpLoginView != null && _cmpLoginView.visible == false)
  314 + {
  315 + _cmpLoginView.visible = true;
  316 + return;
  317 + }
  318 +
  319 + //Intially load the appstartup_ost.xml for the Static UI data
  320 + OSTManager.getInstance().addEventListener(Event.COMPLETE,onOstComplete);
  321 + var uri:String = CommonUtil.getRelativeContentUri(APPSTARTUP_OST_XML );
  322 + OSTManager.getInstance().load(uri);
  323 + }
  324 +
  325 +
  326 +
  327 + private function unloadLoginView():void
  328 + {
  329 + if(_cmpLoginView)
  330 + {
  331 + _cmpLoginView.visible = false;
  332 + removeChild(_cmpLoginView);
  333 +
  334 + _cmpLoginView = null;
  335 +
  336 + }
  337 + }
  338 +
  339 + /**
  340 + * Function implementation for IMVCContainer.getInherentMvcContext()
  341 + * returns the its MVC context.
  342 + *
  343 + */
  344 + public function getInherentMvcContext():IMVCContext
  345 + {
  346 + return MVCContextManager.getInstance().getGlobalContext();
  347 + }
  348 + /**
  349 + * once the appstartup_ost.xml load do action proceed
  350 + */
  351 + private function onOstComplete(objEvent:Event):void
  352 + {
  353 +
  354 + OSTManager.getInstance().removeEventListener(Event.COMPLETE,onOstComplete);
  355 + CommonUtil.APP_LOADER_STRING = OSTManager.getInstance().getValue(StartupOSTConst.LOADING);
  356 + setupMVCContextManager();
  357 + _cmpLoginView = new LoginView();
  358 + _cmpLoginView.percentHeight = 100;
  359 + _cmpLoginView.percentWidth = 100;
  360 + _cmpLoginView.minWidth = 972;
  361 + _cmpLoginView.minHeight = 648;
  362 + addChild(_cmpLoginView);
  363 +
  364 +
  365 + }
  366 + ]]>
  367 + </mx:Script>
  368 +
  369 + <!--
  370 + Initialize MVC Framework classes
  371 + -->
  372 + <mx:Style source="css/Global.css"/>
  373 + <mx:Style source="css/Toolbars.css"/>
  374 + <service:AIAServiceLocator id="_objRemoteService" xmlns:service="com.adam.aia.business.*" />
  375 +
  376 + <controller:StartupFrontController id="_objFrontController" xmlns:contoller="com.adam.aia.appstartup.controller.*" />
  377 + <viewlocator:LocalViewLocator id="_objViewLocator" xmlns:viewlocator="com.magic.cairngorm.view.*" />
  378 + <modellocator:StartupModelLocator id="_objModelLocator" xmlns:modellocator="com.adam.aia.appstartup.model.*" />
  379 + <viewhelper:AppStartupViewHelper id="_objViewHelper" xmlns:viewhelper="com.adam.aia.appstartup.view.helper.*" />
  380 +
  381 +</mx:Application>
... ...
400-SOURCECODE/AIAHTML5+FlexCB/Default.aspxPassingunamePassForOldCB 0 → 100644
  1 +<%@ Page Language="C#" AutoEventWireup="True" Inherits="_Default" Codebehind="Default.aspx.cs" %>
  2 +
  3 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  4 +
  5 +<html lang="en">
  6 +
  7 + <head>
  8 + <title>A.D.A.M. Interactive Anatomy</title>
  9 + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  10 + <meta http-equiv="X-UA-Compatible" content="IE=11"/>
  11 +
  12 + <script type="text/javascript">
  13 + //var appVersion = 'v107';
  14 + //Below code is for opening CB directly from AIAHTML5 as CB is not ready
  15 + //till Aug2018 and new AIAHTML5 is going live. v1018 is having the code which opens CB with user authentication
  16 + var appVersion = 'v1018';
  17 +
  18 + </script>
  19 +
  20 + <script type="text/javascript" src="v1018/js/lib/jquery-1.8.1.min.js?vers=v1018"></script>
  21 + <script type="text/javascript" src="v1018/js/AC_OETags.js?vers=v1018"></script>
  22 + <script type="text/javascript" src="http://webplayer.unity3d.com/download_webplayer-3.x/3.0/uo/UnityObject2.js?vers=v1018"></script>
  23 + <!--<script type="text/javascript" src="v1018/js/unity3D.js?vers=v1018"></script>-->
  24 + <script type="text/javascript" src="v1018/js/dynamicDiv.js?vers=v1018"></script>
  25 + <script type="text/javascript" src="v1018/js/functions.js?vers=v1018"></script>
  26 + <!--<script type="text/javascript" src="v1018/history/history.js?vers=v1018"></script>-->
  27 + <!--<script type="text/javascript" src="v1018/js/maintenanceProperties.js?vers=v1018></script>
  28 + <script type="text/javascript" src="v1018/js/messagePopUp.js?vers=v1018"></script>-->
  29 +<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/aes.js"></script>
  30 + <link rel="stylesheet" type="text/css" href="v1018/history/history.css" />
  31 +
  32 + <style type="text/css">
  33 + html { height:100%; overflow:hidden; }
  34 + body { margin: 0px;padding:0px; height:100%; }
  35 + </style>
  36 +
  37 + <script type='text/VBScript'>
  38 + function DetectUnityWebPlayerActiveX
  39 + on error resume next
  40 + dim tControl
  41 + dim res
  42 + res = 0
  43 + set tControl = CreateObject("UnityWebPlayer.UnityWebPlayer.1")
  44 + if IsObject(tControl) then
  45 + res = 1
  46 + end if
  47 + DetectUnityWebPlayerActiveX = res
  48 + end function
  49 + </script>
  50 + <script type="text/javascript">
  51 + if (tempTrace == null) { function tempTrace(message) { try { if (console != null && console.log != null) { console.log(message); } } catch (e) { } } }
  52 + </script>
  53 + <script type="text/javascript">
  54 +
  55 + function resizeFlashDivHeight() {
  56 + $('#flashDiv').height(window.document.body.offsetHeight);
  57 + };
  58 +
  59 + window.onresize = function () { setTimeout(resizeFlashDivHeight, 250); };
  60 + $(document).ready(resizeFlashDivHeight);
  61 +
  62 + function logoutUserNormal() {
  63 + tempTrace("Default.aspx * DEBUG logoutUserNormal()");
  64 + // $.post('http://' + window.location.host + '/LogoutUser.aspx', {}, '');
  65 + //return "This request will cause to Logout from the application, You will have to login again to access the application.";
  66 + return "Warning: You are leaving this product without logging out. If you continue, your information will be lost and your account will lock for 5 minutes.";
  67 + }
  68 + function logoutUser(evt) {
  69 + tempTrace("Default.aspx * DEBUG logoutUser()");
  70 + if (typeof evt == 'undefined') {
  71 + evt = window.event;
  72 + }
  73 + tempTrace("Default.aspx * DEBUG logoutUser() evt = " + evt);
  74 + //if (evt && evt.clientX >= (window.event.screenX - 150) && evt.clientY >= -150 && evt.clientY <= 0) { //NOTE: Chrome did not return any clientX info.
  75 + if (evt && evt.clientY >= -150 && evt.clientY <= 0) { //NOTE: Chrome did not return any clientX info.
  76 + //$.post('http://' + window.location.host + '/LogoutUser.aspx', {}, '');
  77 + return "Warning: You are leaving this product without logging out. If you continue, your information will be lost and your account will lock for 5 minutes.";
  78 + }
  79 + }
  80 + if (navigator.appVersion.indexOf("MSIE") != -1 && navigator.appVersion.toLowerCase().indexOf("win") != -1) {
  81 + window.onbeforeunload = logoutUser;//function () { return logoutUser(); };
  82 + } else {
  83 + window.onbeforeunload = logoutUserNormal;
  84 + }
  85 +
  86 + // Function to check the page opener and reload the parent if openner is an iframe.
  87 + function checkOpener() {
  88 + // Check if page is loading iside an iFrame.
  89 + if (top != self) {
  90 + parent.location.reload();
  91 + }
  92 + }
  93 + </script>
  94 + <script language="JavaScript" type="text/javascript">
  95 +
  96 + // -----------------------------------------------------------------------------
  97 + // Globals
  98 + // Major version of Flash required
  99 + var requiredMajorVersion = 10;
  100 + // Minor version of Flash required
  101 + var requiredMinorVersion = 0;
  102 + // Minor version of Flash required
  103 + var requiredRevision = 0;
  104 + // -----------------------------------------------------------------------------
  105 +
  106 + //----------------- Unity Player check ----------------------
  107 + function DetectUnityWebPlayer() {
  108 + tempTrace("Default.aspx * DEBUG DetectUnityWebPlayer()");
  109 + var tInstalled = false;
  110 + if (navigator.appVersion.indexOf("MSIE") != -1 && navigator.appVersion.toLowerCase().indexOf("win") != -1) {
  111 + tInstalled = DetectUnityWebPlayerActiveX();
  112 + }
  113 + else {
  114 + if (navigator.mimeTypes && navigator.mimeTypes["application/vnd.unity"]) {
  115 + if (navigator.mimeTypes["application/vnd.unity"].enabledPlugin && navigator.plugins && navigator.plugins["Unity Player"]) {
  116 + tInstalled = true;
  117 + }
  118 + }
  119 + }
  120 + return tInstalled;
  121 + }
  122 +
  123 + function GetUnityInstallerPath() {
  124 + tempTrace("Default.aspx * DEBUG GetUnityInstallerPath()");
  125 + var tDownloadURL = "";
  126 + var hasXpi = navigator.userAgent.toLowerCase().indexOf("firefox") != -1;
  127 +
  128 + // Use standalone installer
  129 + if (navigator.platform == "MacIntel")
  130 + tDownloadURL = "http://webplayer.unity3d.com/download_webplayer-3.x/webplayer-i386.dmg";
  131 + else if (navigator.platform == "MacPPC")
  132 + tDownloadURL = "http://webplayer.unity3d.com/download_webplayer-3.x/webplayer-ppc.dmg";
  133 + else if (navigator.platform.toLowerCase().indexOf("win") != -1)
  134 + tDownloadURL = "http://webplayer.unity3d.com/download_webplayer-3.x/UnityWebPlayer.exe";
  135 + return tDownloadURL;
  136 + }
  137 + </script>
  138 +
  139 + </head>
  140 +<body>
  141 +<script type="text/javascript">
  142 + var maintenancePropertiesJs = document.createElement('script');
  143 + maintenancePropertiesJs.src = appVersion +"/js/maintenanceProperties.js?v="+new Date().getTime();
  144 + var messagePopUpJs = document.createElement('script');
  145 + messagePopUpJs.src = appVersion +"/js/messagePopUp.js?v="+new Date().getTime();
  146 + var head = document.getElementsByTagName('head')[0];
  147 + head.appendChild(maintenancePropertiesJs);
  148 + setTimeout(function(){
  149 + head.appendChild(messagePopUpJs);
  150 + },100);
  151 +</script>
  152 +<div id="flashDiv" style="z-index:0">
  153 + <script type="text/javascript">
  154 +
  155 + //Below is for opening CB directly from AIAHTML5 as CB is not ready
  156 + //till Aug2018 and new AIAHTML5 is going live.
  157 +
  158 + var UserName = new URL(location.href).searchParams.get('un');
  159 + var UserPassword = new URL(location.href).searchParams.get('up');
  160 +
  161 +
  162 + var key = CryptoJS.enc.Base64.parse("MTIzNDU2NzgxMjM0NTY3OA");
  163 + var iv = CryptoJS.enc.Base64.parse("EBESExQVFhcYGRobHB0eHw");
  164 +
  165 +
  166 + var decryptedUserName = (CryptoJS.AES.decrypt(UserName, key, { iv: iv })).toString(CryptoJS.enc.Utf8);
  167 + var decryptedPassword = (CryptoJS.AES.decrypt(UserPassword, key, { iv: iv })).toString(CryptoJS.enc.Utf8);
  168 +
  169 +
  170 +
  171 + // Version check for the Flash Player that has the ability to start Player Product Install (6.0r65)
  172 + var hasProductInstall = DetectFlashVer(6, 0, 65);
  173 +
  174 + // alert('has Player: ' + hasProductInstall);
  175 +
  176 + // Version check based upon the values defined in globals
  177 + var hasRequestedVersion = DetectFlashVer(requiredMajorVersion, requiredMinorVersion, requiredRevision);
  178 +
  179 + if (hasProductInstall && !hasRequestedVersion) {
  180 + // DO NOT MODIFY THE FOLLOWING FOUR LINES
  181 + // Location visited after installation is complete if installation is required
  182 + var MMPlayerType = (isIE == true) ? "ActiveX" : "PlugIn";
  183 + var MMredirectURL = window.location;
  184 + document.title = document.title.slice(0, 47) + " - Flash Player Installation";
  185 + var MMdoctitle = document.title;
  186 + window.location.href = 'http://qa.interactiveanatomy.com/AdobePlayerDownloadLink.html';
  187 +
  188 + } else if (hasRequestedVersion) {
  189 + tempTrace("Default.aspx * DEBUG hasRequestedVersion write will occur");
  190 + // if we've detected an acceptable version
  191 + // embed the Flash Content SWF when all tests are passed
  192 + var params = "<%=urlParams%>";
  193 + AC_FL_RunContent(
  194 + "src", appVersion + "/AppStartup" + params,
  195 + "width", "100%",
  196 + "height", "100%",
  197 + "align", "middle",
  198 + "id", "flashObject",
  199 + "quality", "high",
  200 + "bgcolor", "#000000",
  201 + "name", "flashObject",
  202 + "wmode", "opaque",
  203 + "allowScriptAccess", "sameDomain",
  204 + "type", "application/x-shockwave-flash",
  205 + "pluginspage", "http://www.adobe.com/go/getflashplayer",
  206 + "FlashVars","username="+decryptedUserName+"&password="+decryptedPassword
  207 +
  208 + );
  209 + } else
  210 + {
  211 + // THE CODE ON 15th MACHINE flash is too old or we can't detect the plugin
  212 + tempTrace("Default.aspx * DEBUG objNewInstall write will occur");
  213 + window.location.href = 'http://qa.interactiveanatomy.com/AdobePlayerDownloadLink.html';
  214 +
  215 +
  216 + }
  217 +
  218 + </script>
  219 +<noscript><p>JavaScript is not activated.</p></noscript>
  220 +
  221 +</div>
  222 + <!-- Here Test -->
  223 + <div id="myConsole" runat="server"></div>
  224 +</body>
  225 +</html>
0 226 \ No newline at end of file
... ...
400-SOURCECODE/AIAHTML5+FlexCB/ShadowedTextToggleButtonBar.as 0 → 100644
  1 +package com.magic.component
  2 +{
  3 + import flash.events.MouseEvent;
  4 +
  5 + import mx.controls.ToggleButtonBar;
  6 + import mx.core.ClassFactory;
  7 + import mx.core.IFlexDisplayObject;
  8 + import mx.core.IUITextField;
  9 + import mx.styles.CSSStyleDeclaration;
  10 + import flash.events.KeyboardEvent;
  11 + import mx.styles.StyleManager;
  12 +
  13 + public class ShadowedTextToggleButtonBar extends ToggleButtonBar
  14 + {
  15 + private var navItemFactory:ClassFactory;
  16 +
  17 + private var buttonStyleNameProp:String = "buttonStyleName";
  18 +
  19 + /**
  20 + * @private
  21 + * Name of style used to specify buttonStyleName.
  22 + * Overridden by TabBar.
  23 + */
  24 + private var firstButtonStyleNameProp:String = "firstButtonStyleName";
  25 +
  26 + /**
  27 + * @private
  28 + * Name of style used to specify buttonStyleName.
  29 + * Overridden by TabBar.
  30 + */
  31 + private var lastButtonStyleNameProp:String = "lastButtonStyleName";
  32 +
  33 + /**
  34 + * @private
  35 + * Name of style used to specify buttonWidth.
  36 + * Overridden by TabBar.
  37 + */
  38 + private var buttonWidthProp:String = "buttonWidth";
  39 +
  40 + /**
  41 + * @private
  42 + * Name of style used to specify buttonHeight.
  43 + * Overridden by TabBar.
  44 + */
  45 + private var buttonHeightProp:String = "buttonHeight";
  46 +
  47 + private var recalcButtonWidths:Boolean = false;
  48 +
  49 + /**
  50 + * @private
  51 + * Flag indicating whether buttons heights should be recalculated.
  52 + */
  53 + private var recalcButtonHeights:Boolean = false;
  54 +
  55 + public function ShadowedTextToggleButtonBar()
  56 + {
  57 + //TODO: implement function
  58 + super();
  59 + navItemFactory = new ClassFactory(ShadowedTextButton);
  60 + }
  61 + // overridden to block keyboard temporarily.
  62 + override protected function keyDownHandler(event:KeyboardEvent):void
  63 + {
  64 + //do nothing
  65 + }
  66 + override protected function createNavItem(strLabel:String, clsIcon:Class=null):IFlexDisplayObject
  67 + {
  68 + var newButton:ShadowedTextButton = ShadowedTextButton(navItemFactory.newInstance());
  69 + // Set tabEnabled to false so individual buttons don't get focus.
  70 + newButton.focusEnabled = false;
  71 +
  72 + var buttonStyleName:String = getStyle(buttonStyleNameProp);
  73 + var firstButtonStyleName:String = getStyle(firstButtonStyleNameProp);
  74 + var lastButtonStyleName:String = getStyle(lastButtonStyleNameProp);
  75 +
  76 + if (!buttonStyleName)
  77 + buttonStyleName = "ButtonBarButton";
  78 + if (!firstButtonStyleName)
  79 + firstButtonStyleName = buttonStyleName;
  80 + if (!lastButtonStyleName)
  81 + lastButtonStyleName = buttonStyleName;
  82 +
  83 + var n:int = numChildren;
  84 + if (n == 0)
  85 + {
  86 + newButton.styleName = buttonStyleName;
  87 + }
  88 + else
  89 + {
  90 + if(strLabel!="Curriculum Builder"){
  91 + newButton.styleName = lastButtonStyleName;
  92 + //var CBuilderButton:ShadowedTextButton = ShadowedTextButton(getChildAt(6));
  93 + //CBuilderButton.setStyle("color","#000000");
  94 + }
  95 + else{
  96 + newButton.setStyle("color","#0000FF");
  97 + }
  98 + var cssStyleDeclaration:CSSStyleDeclaration =
  99 + StyleManager.getStyleDeclaration("." + lastButtonStyleName);
  100 +
  101 + if (cssStyleDeclaration &&
  102 + !cssStyleDeclaration.getStyle("focusRoundedCorners"))
  103 + {
  104 + newButton.setStyle("focusRoundedCorners", "tr br");
  105 + }
  106 +
  107 + // Refresh the skins for the last button that was in this position.
  108 + var first:Boolean = (n == 1);
  109 + var lastButton:ShadowedTextButton = ShadowedTextButton(getChildAt(first ? 0 : n - 1));
  110 +
  111 + if (first)
  112 + {
  113 + lastButton.styleName = firstButtonStyleName;
  114 + cssStyleDeclaration =
  115 + StyleManager.getStyleDeclaration("." + firstButtonStyleName);
  116 +
  117 + if (cssStyleDeclaration &&
  118 + !cssStyleDeclaration.getStyle("focusRoundedCorners"))
  119 + {
  120 + lastButton.setStyle("focusRoundedCorners", "tl bl");
  121 + }
  122 + }
  123 + else
  124 + {
  125 + lastButton.styleName = buttonStyleName;
  126 + cssStyleDeclaration =
  127 + StyleManager.getStyleDeclaration("." + buttonStyleName);
  128 +
  129 + if (cssStyleDeclaration &&
  130 + !cssStyleDeclaration.getStyle("focusRoundedCorners"))
  131 + {
  132 + lastButton.setStyle("focusRoundedCorners", "");
  133 + }
  134 + }
  135 +
  136 + // lastButton.changeSkins();
  137 + lastButton.invalidateDisplayList();
  138 + }
  139 +
  140 + newButton.label = strLabel;
  141 + // newButton.setStyle("icon", icon);
  142 + newButton.minHeight=35;
  143 + //newButton.maxHeight=38;
  144 + newButton.addEventListener(MouseEvent.CLICK, clickHandler);
  145 +
  146 + this.addChild(newButton);
  147 +
  148 + recalcButtonWidths = recalcButtonHeights = true;
  149 + newButton.addTextFilter();
  150 + return newButton;
  151 + }
  152 +
  153 + }
  154 +}
0 155 \ No newline at end of file
... ...
400-SOURCECODE/AIAHTML5.API/AIAHTML5.API.csproj
... ... @@ -120,6 +120,7 @@
120 120 <Compile Include="Constants\ErrorHelper.cs" />
121 121 <Compile Include="Controllers\AdminAccessController.cs" />
122 122 <Compile Include="Controllers\AuthenticateController.cs" />
  123 + <Compile Include="Controllers\ClientController.cs" />
123 124 <Compile Include="Controllers\ConfigurationController.cs" />
124 125 <Compile Include="Controllers\ForgotUserController.cs" />
125 126 <Compile Include="Controllers\LabExerciseController.cs" />
... ... @@ -131,6 +132,7 @@
131 132 <DependentUpon>Global.asax</DependentUpon>
132 133 </Compile>
133 134 <Compile Include="Models\DBModel.cs" />
  135 + <Compile Include="Models\IPValidator.cs" />
134 136 <Compile Include="Models\LabExercise.cs" />
135 137 <Compile Include="Models\PixelLocator.cs" />
136 138 <Compile Include="Models\User.cs" />
... ... @@ -146,7 +148,9 @@
146 148 </ItemGroup>
147 149 <ItemGroup>
148 150 <Content Include="Logs\AIALogs.log" />
149   - <Content Include="packages.config" />
  151 + <Content Include="packages.config">
  152 + <SubType>Designer</SubType>
  153 + </Content>
150 154 <None Include="Properties\Settings.settings">
151 155 <Generator>SettingsSingleFileGenerator</Generator>
152 156 <LastGenOutput>Settings.Designer.cs</LastGenOutput>
... ...
400-SOURCECODE/AIAHTML5.API/Constants/AIAConstants.cs
... ... @@ -44,5 +44,44 @@ namespace AIAHTML5.API.Constants
44 44 public const string LAB_EXERCISE_SAVE_SUCCESS = "Your lab exercise attempt is saved.";
45 45 public const string LAB_EXERCISE_SAVE_FAILURE = "We are unable to save your lab exercise attempt, please try again.";
46 46 public const string SAVED_LAB_EXERCISE_NOT_FOUND = "Saved Lab Exercise not found.";
  47 + public const string VALIDATED_CLIENT = "Valid Client.";
  48 + public const string INVALID_CLIENT = "InValid Client.";
  49 + public const string MSG_NOT_AUTHORIZE_SITE_USER = "User is not authorized.";
  50 +
  51 +
  52 + public const string STATUS_OK = "ok";
  53 + public const string STATUS_NOT_OK = "notok";
  54 + public const int NO_ERROR = 0;
  55 + public const int RUN_TIME_EXCEPTION = 10000;
  56 +
  57 + public const String SITE_IP = "siteIP";
  58 + public const String SITE_ID = "siteId";
  59 + public const String TERM_CONDITION = "termCondition";
  60 + public const String MODESTY_SETTING = "modestySetting";
  61 +
  62 + public const Byte SUPER_ADMIN = 1;
  63 + public const Byte GENERAL_ADMIN = 2;
  64 + public const String USER_NAME = "username";
  65 + public const String PASSWORD = "password";
  66 + public const String ERROR_ID = "errorId";
  67 + public const String LICENSE_ACTIVE = "licenceActive";
  68 + public const String ACCOUNT_NUMBER = "accountNumber";
  69 + public const String LICENSE_TYPE_ID = "licenceTypeId";
  70 + public const String TOTAL_LOGIN = "totalLogin";
  71 + public const String EDITION_ID = "editionId";
  72 + public const String URL_REFERER = "urlReferer";
  73 + public const String USER_CONTEXT = "usercontext";
  74 +
  75 + public const Byte CONCURRENT_USER = 6;
  76 + public const Byte SINGLE_USER = 5;
  77 + public const Byte SITE_USER = 9;
  78 +
  79 + public const String LICENSE_ID = "licenseId";
  80 + public const Byte LICENSE_TYPE_CONCURRENT = 1;
  81 + public const Byte LICENSE_TYPE_SINGLE = 2;
  82 + public const Byte LICENSE_TYPE_SITE = 3;
  83 + public const Byte LICENSE_TYPE_RESELLER = 4;
  84 + public const Byte LICENSE_TYPE_TEST = 5;
  85 +
47 86 }
48 87 }
49 88 \ No newline at end of file
... ...
400-SOURCECODE/AIAHTML5.API/Constants/DBConstants.cs
... ... @@ -29,6 +29,10 @@ namespace AIAHTML5.API.Constants
29 29 public const string GET_BLOCKED_USERS_BY_USER_TYPE = "GetBlockedUserByUserType";
30 30 public const string SAVE_LAB_EXERCISE_ATTEMPT = "usp_SaveLabExerciseAttempts";
31 31 public const string GET_LAB_EXERCISE = "GetLabExcerciseByUserId";
  32 + public const string GET_LICENSEINFO_BY_SITE_URL = "GetLicenseIdBySiteUrl";
  33 + public const string GET_LICENSE_BY_SITE_ID = "GetLicenseBySiteId";
  34 + public const string GET_LICENSE_EDITIONS_FOR_MODESTY = "GetLicenseEditionsForModesty";
  35 + public const string GET_PRODUCT_FEATURES = "GetProductFeatures";
32 36  
33 37 }
34 38 }
35 39 \ No newline at end of file
... ...
400-SOURCECODE/AIAHTML5.API/Controllers/ClientController.cs 0 → 100644
  1 +using AIAHTML5.API.Constants;
  2 +using System;
  3 +using System.Collections.Generic;
  4 +using System.Linq;
  5 +using System.Net;
  6 +using System.Net.Http;
  7 +using System.Web.Http;
  8 +using AIAHTML5.API.Models;
  9 +using Newtonsoft.Json.Linq;
  10 +using System.Data.SqlClient;
  11 +using System.Collections;
  12 +using log4net;
  13 +using Newtonsoft.Json;
  14 +
  15 +namespace AIAHTML5.API.Controllers
  16 +{
  17 + public class ClientController : ApiController
  18 + {
  19 + // GET api/client
  20 + public IEnumerable<string> Get()
  21 + {
  22 + return new string[] { "value1", "value2" };
  23 + }
  24 +
  25 + // GET api/client/5
  26 + public string Get(int id)
  27 + {
  28 + return "value";
  29 + }
  30 +
  31 + // POST api/client
  32 + public HttpResponseMessage Post([FromBody]JObject siteUrl)
  33 + {
  34 + ILog logger = log4net.LogManager.GetLogger((System.Reflection.MethodBase.GetCurrentMethod().DeclaringType));
  35 + logger.Debug("inside POST in ClientController");
  36 + try{
  37 + HttpResponseMessage response = null;
  38 + if (siteUrl != null)
  39 + {
  40 + if (!string.IsNullOrEmpty(siteUrl["siteIP"].ToString()) && !string.IsNullOrEmpty(siteUrl["remoteIPAddress"].ToString()) && !string.IsNullOrEmpty(siteUrl["accountNumber"].ToString()) && !string.IsNullOrEmpty(siteUrl["edition"].ToString()))
  41 +
  42 + {
  43 +
  44 + int siteId = AIAHTML5.API.Models.Users.ValidateLicenseSiteIP(siteUrl["siteIP"].ToString(), siteUrl["remoteIPAddress"].ToString(), siteUrl["accountNumber"].ToString(), Convert.ToByte(siteUrl["edition"].ToString()));
  45 + if (siteId > 0)
  46 + {
  47 + dynamic uerinfo = AIAHTML5.API.Models.Users.ValidateSiteLogin(siteUrl["siteIP"].ToString(), siteUrl["accountNumber"].ToString(), siteUrl["urlReferer"].ToString(), siteUrl["edition"].ToString(), siteId);
  48 + if (uerinfo != null)
  49 + response = new HttpResponseMessage { StatusCode = HttpStatusCode.OK, Content = new StringContent(JsonConvert.SerializeObject(uerinfo)) };
  50 + else
  51 + {
  52 + //ser user = new User();
  53 + //user.LoginFailureCauseId = AIAConstants.INVALID_CLIENT;
  54 + //dynamic userinfo = user;
  55 + //response = new HttpResponseMessage { StatusCode = HttpStatusCode.OK, Content = new StringContent(userInfo) };
  56 +
  57 + response = new HttpResponseMessage { StatusCode = HttpStatusCode.OK, Content = new StringContent(AIAConstants.INVALID_CLIENT) };
  58 + }
  59 + }
  60 +
  61 + else
  62 + {
  63 + response = new HttpResponseMessage { StatusCode = HttpStatusCode.OK, Content = new StringContent(AIAConstants.MSG_NOT_AUTHORIZE_SITE_USER) };
  64 +
  65 + }
  66 + }
  67 + }
  68 + else
  69 + {
  70 + response = new HttpResponseMessage { StatusCode = HttpStatusCode.OK, Content = null };
  71 +
  72 + }
  73 +
  74 + return response;
  75 + }
  76 + catch (SqlException e)
  77 + {
  78 +
  79 + logger.Fatal("SqlException occured for siteUrl =" + siteUrl["siteIP"].ToString() + " and siteUrl= " + siteUrl["siteIP"].ToString() + " & accountNumber = " + siteUrl["accountNumber"].ToString() + " &edition = " + siteUrl["edition"].ToString() + "Exception= " + e.Message + ", STACKTRACE: " + e.StackTrace);
  80 +
  81 + ArrayList supportMailList = UserUtility.GetSupportMailList();
  82 + string mailSubject = AIAConstants.SQL_CONNECTION_ERROR_MAIL_SUBJECT;
  83 + string mailBody = "MESSAGE: " + e.Message + ", STACKTRACE: " + e.StackTrace;
  84 + UserUtility.SendEmailForException(0, supportMailList, "", mailSubject, mailBody,true,siteUrl);
  85 +
  86 + return new HttpResponseMessage { StatusCode = HttpStatusCode.InternalServerError, Content = new StringContent(AIAConstants.SQL_CONNECTION_ERROR) };
  87 + }
  88 + catch (Exception e)
  89 + {
  90 +
  91 + logger.Fatal("Exception occured for loginId =" + siteUrl["siteIP"].ToString() + " and siteUrl= " + siteUrl["siteIP"].ToString() + " & accountNumber = " + siteUrl["accountNumber"].ToString() + " &edition = " + siteUrl["edition"].ToString() + "Exception= " + e.Message + ", STACKTRACE: " + e.StackTrace);
  92 + ArrayList supportMailList = UserUtility.GetSupportMailList();
  93 + string mailSubject = AIAConstants.EXCEPTION_IN_AIAHTML5_MAIL_SUBJECT;
  94 + string mailBody = "MESSAGE: " + e.Message + ", STACKTRACE: " + e.StackTrace;
  95 + UserUtility.SendEmailForException(0, supportMailList, "", mailSubject, mailBody, true, siteUrl);
  96 +
  97 + return new HttpResponseMessage { StatusCode = HttpStatusCode.InternalServerError, Content = new StringContent(AIAConstants.EXCEPTION_OCCURED) };
  98 +
  99 + }
  100 + }
  101 +
  102 + // PUT api/client/5
  103 + public void Put(int id, [FromBody]string value)
  104 + {
  105 + }
  106 +
  107 + // DELETE api/client/5
  108 + public void Delete(int id)
  109 + {
  110 + }
  111 + }
  112 +}
... ...
400-SOURCECODE/AIAHTML5.API/Models/DBModel.cs
... ... @@ -980,5 +980,151 @@ namespace AIAHTML5.API.Models
980 980 // return 1;
981 981  
982 982 //}
  983 +
  984 + internal DataTable GetLicenseInfoBySiteUrl(string licenceAccount, int editionId)
  985 + {
  986 + logger.Debug(" inside GetLicenseIdBySiteUrl for UserId= " + editionId + ",licenceAccount = " + licenceAccount);
  987 +
  988 + // SiteUrl siteUrl = null;
  989 + DataTable dt = null;
  990 +
  991 + SqlConnection conn = new SqlConnection(dbConnectionString);
  992 + SqlCommand cmd = new SqlCommand();
  993 + cmd.Connection = conn;
  994 + cmd.CommandText = DBConstants.GET_LICENSEINFO_BY_SITE_URL;
  995 + cmd.CommandType = CommandType.StoredProcedure;
  996 + cmd.Parameters.AddWithValue("@sLicenseAccount", licenceAccount);
  997 + cmd.Parameters.AddWithValue("@iEditionId", editionId);
  998 + SqlDataAdapter da = new SqlDataAdapter();
  999 + da.SelectCommand = cmd;
  1000 + dt = new DataTable();
  1001 + da.Fill(dt);
  1002 +
  1003 + //if (dt != null && dt.Rows.Count > 0)
  1004 + //{
  1005 + // siteUrl = new SiteUrl();
  1006 + // foreach (DataRow dr in dt.Rows)
  1007 + // {
  1008 + // siteUrl.Id = Convert.ToInt32(dr["Id"]);
  1009 + // siteUrl.SiteIp = dr["SiteIp"].ToString();
  1010 + // siteUrl.SiteIpTo = dr["SiteIpTo"].ToString();
  1011 + // siteUrl.SiteMasterIpTo = dr["SiteMasterIpTo"].ToString();
  1012 + // siteUrl.IsMaster = Convert.ToInt32(dr["IsMaster"]);
  1013 +
  1014 + // }
  1015 + //}
  1016 +
  1017 + //return siteUrl;
  1018 + return dt;
  1019 + }
  1020 +
  1021 + internal DataTable GetLicenseBySiteId(int siteId)
  1022 + {
  1023 + logger.Debug(" inside GetLicenseBySiteId for siteId= " + siteId);
  1024 +
  1025 + // SiteUrl siteUrl = null;
  1026 + DataTable dt = null;
  1027 +
  1028 + SqlConnection conn = new SqlConnection(dbConnectionString);
  1029 + SqlCommand cmd = new SqlCommand();
  1030 + cmd.Connection = conn;
  1031 + cmd.CommandText = DBConstants.GET_LICENSE_BY_SITE_ID;
  1032 + cmd.CommandType = CommandType.StoredProcedure;
  1033 + cmd.Parameters.AddWithValue("@sSiteId", siteId);
  1034 +
  1035 + SqlDataAdapter da = new SqlDataAdapter();
  1036 + da.SelectCommand = cmd;
  1037 + dt = new DataTable();
  1038 + da.Fill(dt);
  1039 +
  1040 + //if (dt != null && dt.Rows.Count > 0)
  1041 + //{
  1042 + // siteUrl = new SiteUrl();
  1043 + // foreach (DataRow dr in dt.Rows)
  1044 + // {
  1045 + // siteUrl.Id = Convert.ToInt32(dr["Id"]);
  1046 + // siteUrl.SiteIp = dr["SiteIp"].ToString();
  1047 + // siteUrl.SiteIpTo = dr["SiteIpTo"].ToString();
  1048 + // siteUrl.SiteMasterIpTo = dr["SiteMasterIpTo"].ToString();
  1049 + // siteUrl.IsMaster = Convert.ToInt32(dr["IsMaster"]);
  1050 +
  1051 + // }
  1052 + //}
  1053 +
  1054 + //return siteUrl;
  1055 + return dt;
  1056 +
  1057 + }
  1058 + internal DataTable GetEditionsForModesty(int licenceId, int buildingLevelAcc)
  1059 + {
  1060 + logger.Debug(" inside GetEditionsForModesty for licenceId= " + licenceId);
  1061 +
  1062 + // SiteUrl siteUrl = null;
  1063 + DataTable dt = null;
  1064 +
  1065 + SqlConnection conn = new SqlConnection(dbConnectionString);
  1066 + SqlCommand cmd = new SqlCommand();
  1067 + cmd.Connection = conn;
  1068 + cmd.CommandText = DBConstants.GET_LICENSE_EDITIONS_FOR_MODESTY;
  1069 + cmd.CommandType = CommandType.StoredProcedure;
  1070 + cmd.Parameters.AddWithValue("@iLicenseId", licenceId);
  1071 + cmd.Parameters.AddWithValue("@iBuildingLevelId", buildingLevelAcc);
  1072 +
  1073 + SqlDataAdapter da = new SqlDataAdapter();
  1074 + da.SelectCommand = cmd;
  1075 + dt = new DataTable();
  1076 + da.Fill(dt);
  1077 +
  1078 + //if (dt != null && dt.Rows.Count > 0)
  1079 + //{
  1080 + // siteUrl = new SiteUrl();
  1081 + // foreach (DataRow dr in dt.Rows)
  1082 + // {
  1083 + // siteUrl.Id = Convert.ToInt32(dr["Id"]);
  1084 + // siteUrl.SiteIp = dr["SiteIp"].ToString();
  1085 + // siteUrl.SiteIpTo = dr["SiteIpTo"].ToString();
  1086 + // siteUrl.SiteMasterIpTo = dr["SiteMasterIpTo"].ToString();
  1087 + // siteUrl.IsMaster = Convert.ToInt32(dr["IsMaster"]);
  1088 +
  1089 + // }
  1090 + //}
  1091 +
  1092 + //return siteUrl;
  1093 + return dt;
  1094 + }
  1095 +
  1096 + internal Hashtable GetEditionFeatures(byte editionId)
  1097 + {
  1098 + Hashtable objFeatures = new Hashtable();
  1099 +
  1100 + DataTable dt = null;
  1101 +
  1102 + SqlConnection conn = new SqlConnection(dbConnectionString);
  1103 + SqlCommand cmd = new SqlCommand();
  1104 + cmd.Connection = conn;
  1105 + cmd.CommandText = DBConstants.GET_PRODUCT_FEATURES;
  1106 + cmd.CommandType = CommandType.StoredProcedure;
  1107 + cmd.Parameters.AddWithValue("@EditionId", editionId);
  1108 +
  1109 + SqlDataAdapter da = new SqlDataAdapter();
  1110 + da.SelectCommand = cmd;
  1111 + dt = new DataTable();
  1112 + da.Fill(dt);
  1113 +
  1114 + if (dt != null && dt.Rows.Count > 0)
  1115 + {
  1116 + foreach (DataRow dr in dt.Rows)
  1117 + {
  1118 + if (Convert.ToBoolean(dr["IsActive"]))
  1119 + {
  1120 + objFeatures.Add(dr["Id"], dr["Title"]);
  1121 + }
  1122 +
  1123 +
  1124 + }
  1125 + }
  1126 +
  1127 + return objFeatures;
  1128 + }
983 1129 }
984 1130 }
985 1131 \ No newline at end of file
... ...
400-SOURCECODE/AIAHTML5.API/Models/IPValidator.cs 0 → 100644
  1 +using System;
  2 +using System.Collections.Generic;
  3 +using System.Linq;
  4 +using System.Text.RegularExpressions;
  5 +using System.Web;
  6 +
  7 +namespace AIAHTML5.API.Models
  8 +{
  9 + public class IPValidator
  10 + {
  11 + public static Double ChangeIpToDouble(String ipVal)
  12 + {
  13 + String[] resultArray = new String[20];
  14 + //Array resultArray ;
  15 + String n = ipVal;
  16 + String[] array = n.Split('.');
  17 + for (int i = 0; i < array.Length; i++)
  18 + {
  19 + if (array[i].Length == 1)
  20 + {
  21 + array[i] = "00" + array[i];
  22 + resultArray[i] = (array[i]);
  23 + }
  24 + else if (array[i].Length == 2)
  25 + {
  26 + array[i] = "0" + array[i];
  27 + resultArray[i] = (array[i]);
  28 + }
  29 + else
  30 + {
  31 + array[i] = array[i];
  32 + resultArray[i] = (array[i]);
  33 + }
  34 + }
  35 +
  36 + //String theContent = resultArray.ToString();
  37 + String theContent = "";
  38 +
  39 + for (int i = 0; i <= resultArray.Length - 1; i++)
  40 + {
  41 + if (!String.IsNullOrEmpty(resultArray[i]))
  42 + theContent += resultArray[i];
  43 + }
  44 + theContent = (theContent == "" ? "0" : theContent);
  45 +
  46 + return Convert.ToDouble(theContent);
  47 + //return theContent;
  48 + }
  49 +
  50 +
  51 + public static bool ValidateIP(String strSiteIp, String strSiteIPTo, String strSiteMasterIPTo, String strIPToValidate, int intIsMaster)
  52 + {
  53 + Double dblSiteIP = 0;
  54 + Double dblSiteIPTo = 0;
  55 + Double dblSiteMIPTo = 0;
  56 + Double dblIPToValidate = 0;
  57 + bool boolReturn = false;
  58 +
  59 + try
  60 + {
  61 + // Convert all IP to double values
  62 + dblSiteIP = ChangeIpToDouble(((strSiteIp == "" || IsNumericIP(strSiteIp) == false) ? "0" : strSiteIp));
  63 + dblSiteIPTo = ChangeIpToDouble(((strSiteIPTo == "" || IsNumericIP(strSiteIPTo) == false) ? "0" : strSiteIPTo));
  64 + dblSiteMIPTo = ChangeIpToDouble(((strSiteMasterIPTo == "" || IsNumericIP(strSiteMasterIPTo) == false) ? "0" : strSiteMasterIPTo));
  65 + dblIPToValidate = ChangeIpToDouble(((strIPToValidate == "" || IsNumericIP(strIPToValidate) == false) ? "0" : strIPToValidate));
  66 +
  67 + if (intIsMaster > 0)
  68 + {
  69 + if (dblSiteIP == dblIPToValidate)
  70 + boolReturn = true;
  71 +
  72 + if (dblSiteIPTo > 0 && dblSiteMIPTo > 0)
  73 + {
  74 + if (isBetween(dblIPToValidate, dblSiteIPTo, dblSiteMIPTo) == true)
  75 + {
  76 + boolReturn = true;
  77 + }
  78 + }
  79 + else if (dblSiteIPTo > 0)
  80 + {
  81 + if (dblSiteIPTo == dblIPToValidate)
  82 + boolReturn = true;
  83 + }
  84 + else if (dblSiteMIPTo > 0)
  85 + {
  86 + if (dblSiteMIPTo == dblIPToValidate)
  87 + boolReturn = true;
  88 + }
  89 + }
  90 + else
  91 + {
  92 + if (dblSiteIP > 0 && dblSiteIPTo > 0)
  93 + {
  94 + if (isBetween(dblIPToValidate, dblSiteIP, dblSiteIPTo) == true)
  95 + {
  96 + boolReturn = true;
  97 + }
  98 + }
  99 + else if (dblSiteIP > 0)
  100 + {
  101 + if (dblSiteIP == dblIPToValidate)
  102 + boolReturn = true;
  103 + }
  104 + else if (dblSiteIPTo > 0)
  105 + {
  106 + if (dblSiteIPTo == dblIPToValidate)
  107 + boolReturn = true;
  108 + }
  109 + }
  110 +
  111 + return boolReturn;
  112 + }
  113 + catch (Exception objExp)
  114 + {
  115 + return false;
  116 + }
  117 + }
  118 +
  119 + public static String FormatURLToIP(String strURL)
  120 + {
  121 + strURL = strURL.Replace("www.", "");
  122 + strURL = strURL.Replace("http://", "");
  123 + strURL = strURL.Replace("https://", "");
  124 + strURL = strURL.Replace("/", "");
  125 +
  126 + if (strURL.IndexOf(":") != -1)
  127 + {
  128 + char[] delimiters = new char[] { ':' };
  129 + string[] parts = strURL.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);
  130 + strURL = parts[0];
  131 + }
  132 +
  133 + return strURL;
  134 + }
  135 +
  136 + /// <summary>
  137 + ///
  138 + /// </summary>
  139 + /// <param name="iNum"></param>
  140 + /// <param name="iFrom"></param>
  141 + /// <param name="iTo"></param>
  142 + /// <returns></returns>
  143 + private static bool isBetween(Double iNum, Double iFrom, Double iTo)
  144 + {
  145 + if (iNum == 0)
  146 + return false;
  147 +
  148 + if (iNum >= iFrom && iNum <= iTo)
  149 + {
  150 + return true;
  151 + }
  152 + return false;
  153 + }
  154 +
  155 + /// <summary>
  156 + ///
  157 + /// </summary>
  158 + /// <param name="text"></param>
  159 + /// <returns></returns>
  160 + public static bool IsNumericIP(string text)
  161 + {
  162 + //Regex objRegex = new Regex(@"^[-+]?[0-9]*\.?[0-9]+$");
  163 + Regex objRegex = new Regex(@"^[-+]?[0-9]*\.?[0-9]+$*\.?[0-9]+$*\.?[0-9]+$*\.?[0-9]+$");
  164 +
  165 + return objRegex.IsMatch(text);
  166 + }
  167 + }
  168 +}
0 169 \ No newline at end of file
... ...
400-SOURCECODE/AIAHTML5.API/Models/User.cs
... ... @@ -14,6 +14,11 @@ namespace AIAHTML5.API.Models
14 14 public string EmailId { get; set; }
15 15 public string LoginId { get; set; }
16 16 public string Password { get; set; }
  17 + public string AccountNumber { get; set; }
  18 + public byte LicenseTypeId { get; set; }
  19 + public bool Modesty { get; set; }
  20 + public bool ModestyMode { get; set; }
  21 + public Hashtable objEditionFeatures { get; set; }
17 22 public int? SecurityQuestionId { get; set; }
18 23 public string SecurityAnswer { get; set; }
19 24 public int? CreatorId { get; set; }
... ... @@ -49,6 +54,8 @@ namespace AIAHTML5.API.Models
49 54 public const string RESELLER = "Reseller";
50 55 public const string TEST_ACCOUNT = "Test Account";
51 56 public const string SITE_USER = "Site User";
  57 +
  58 +
52 59 }
53 60  
54 61 public enum UserType
... ... @@ -113,4 +120,18 @@ namespace AIAHTML5.API.Models
113 120 public string AccountNumber { get; set; }
114 121 public DateTime LoginTime { get; set; }
115 122 }
  123 +
  124 + public class SiteUrl
  125 + {
  126 + public int Id { get; set; }
  127 + public string SiteIp { get; set; }
  128 + public string SiteIpTo { get; set; }
  129 + public string SiteMasterIpTo { get; set; }
  130 + public int IsMaster { get; set; }
  131 +
  132 +
  133 +
  134 +
  135 + }
  136 +
116 137 }
117 138 \ No newline at end of file
... ...
400-SOURCECODE/AIAHTML5.API/Models/UserUtility.cs
... ... @@ -16,6 +16,7 @@ using System.Configuration;
16 16 using System.Collections;
17 17 using System.Data;
18 18 using System.Reflection;
  19 +using Newtonsoft.Json.Linq;
19 20  
20 21 namespace AIAHTML5.API.Models
21 22 {
... ... @@ -216,10 +217,10 @@ namespace AIAHTML5.API.Models
216 217 }
217 218 }
218 219  
219   - public static bool SendEmailForException(int userid, ArrayList mailToList, string sender, string mailSubject = "", string mailBody = "")
  220 + public static bool SendEmailForException(int userid, ArrayList mailToList, string sender, string mailSubject = "", string mailBody = "", bool isMailForClentSite=false, JObject info=null)
220 221 {
221 222 ILog logger = log4net.LogManager.GetLogger((System.Reflection.MethodBase.GetCurrentMethod().DeclaringType));
222   - logger.Debug("Inside SendEmail with userid =" + userid);
  223 + // logger.Debug("Inside SendEmail with userid =" + userid);
223 224  
224 225 try
225 226 {
... ... @@ -235,8 +236,14 @@ namespace AIAHTML5.API.Models
235 236 lstToAddress.Add(email);
236 237 }
237 238  
238   - emailMessage = "Unable to process request for userid: " + userid;
239   -
  239 + if (isMailForClentSite && info!=null)
  240 + {
  241 + emailMessage = "Unable to process request for siteUrl =" + info["siteIP"].ToString() + " and siteIP= " + info["siteIP"].ToString() + " & accountNumber = " + info["accountNumber"].ToString() + " &edition = " + info["edition"].ToString() ;
  242 + }
  243 + else
  244 + {
  245 + emailMessage = "Unable to process request for userid: " + userid;
  246 + }
240 247  
241 248  
242 249 if (string.IsNullOrEmpty(sender))
... ... @@ -264,7 +271,13 @@ namespace AIAHTML5.API.Models
264 271 return true;
265 272 }
266 273 catch (Exception ex)
267   - {
  274 + {
  275 + if (isMailForClentSite){
  276 + logger.Fatal("exception in SendEmail for siteUrl =" + info["siteIP"].ToString()+ ". msg= " + ex.Message + ", stacktrace= " + ex.StackTrace);
  277 +
  278 + }
  279 +
  280 + else
268 281 logger.Fatal("exception in SendEmail for userid"+userid+ ". msg= " + ex.Message + ", stacktrace= " + ex.StackTrace);
269 282 return false;
270 283 }
... ...
400-SOURCECODE/AIAHTML5.API/Models/Users.cs
... ... @@ -11,7 +11,9 @@ using AIAHTML5.API.Models;
11 11 using Newtonsoft.Json;
12 12 using System.Collections;
13 13 using System.Data.SqlClient;
14   -
  14 +using System.Net;
  15 +using System.Data;
  16 +using AIAHTML5.API.Constants;
15 17 namespace AIAHTML5.API.Models
16 18 {
17 19 public class Users
... ... @@ -22,22 +24,22 @@ namespace AIAHTML5.API.Models
22 24 logger.Debug("inside AuthenticateUser for loginId =" + credentials["username"].ToString() + " and password= " + credentials["password"].ToString());
23 25 dynamic userDetails = null;
24 26  
25   -
26   - User user = DBModel.GetUserDetailsByLoginId(credentials["username"].ToString());
27   - //string userDetails = DBModel.GetUserDetailsByLoginId2(credentials["username"].ToString());
28 27  
29   - if (user != null)
30   - {
31   - logger.Debug("userDetails.loginId= " + user.LoginId); // .loginId);
  28 + User user = DBModel.GetUserDetailsByLoginId(credentials["username"].ToString());
  29 + //string userDetails = DBModel.GetUserDetailsByLoginId2(credentials["username"].ToString());
  30 +
  31 + if (user != null)
  32 + {
  33 + logger.Debug("userDetails.loginId= " + user.LoginId); // .loginId);
  34 +
  35 + userDetails = JsonConvert.SerializeObject(user);
  36 + }
  37 + else
  38 + {
  39 + userDetails = AIAConstants.USER_NOT_FOUND;
  40 + }
32 41  
33   - userDetails = JsonConvert.SerializeObject(user);
34   - }
35   - else
36   - {
37   - userDetails = AIAConstants.USER_NOT_FOUND;
38   - }
39 42  
40   -
41 43 return userDetails;
42 44 }
43 45  
... ... @@ -45,32 +47,32 @@ namespace AIAHTML5.API.Models
45 47 {
46 48 logger.Debug(" inside GetUserByEmail for emailId = " + userInfo["emailId"]);
47 49  
48   -
49   - User objUser = DBModel.GetUserDetailsByEmailId(userInfo["emailId"].ToString());
50 50  
51   - //dynamic userDetails;
  51 + User objUser = DBModel.GetUserDetailsByEmailId(userInfo["emailId"].ToString());
  52 +
  53 + //dynamic userDetails;
  54 +
  55 + if (objUser != null)
  56 + {
  57 + logger.Debug("userDetails.loginId= " + objUser.LoginId);
  58 + //return userDetails = JsonConvert.SerializeObject(objUser);
  59 + return objUser;
  60 + }
  61 + else
  62 + {
  63 + return AIAConstants.USER_NOT_FOUND;
  64 + }
52 65  
53   - if (objUser!= null)
54   - {
55   - logger.Debug("userDetails.loginId= " + objUser.LoginId);
56   - //return userDetails = JsonConvert.SerializeObject(objUser);
57   - return objUser;
58   - }
59   - else
60   - {
61   - return AIAConstants.USER_NOT_FOUND;
62   - }
63   -
64 66  
65 67 }
66 68  
67 69 internal static dynamic UpdatePassword(Newtonsoft.Json.Linq.JObject userInfo, string sLoginId, string sEmailId)
68 70 {
69   -
70   - int result = DBModel.UpdateUserPassword(userInfo, sLoginId, sEmailId);
71 71  
72   - return result;
73   -
  72 + int result = DBModel.UpdateUserPassword(userInfo, sLoginId, sEmailId);
  73 +
  74 + return result;
  75 +
74 76 }
75 77  
76 78 internal static dynamic UpdateLicenseTerm(Newtonsoft.Json.Linq.JObject userLicenseInfo)
... ... @@ -83,13 +85,13 @@ namespace AIAHTML5.API.Models
83 85  
84 86 userInfo.Add("accountNumber", accountNumber);
85 87  
86   -
87   - result = DBModel.UpdateLicenseTermStatus(accountNumber);
88 88  
89   - if (result < 0)
90   - {
91   - logger.Fatal("Unable to update LicenseTermAccepted status for AccountNumber =" + accountNumber);
92   - }
  89 + result = DBModel.UpdateLicenseTermStatus(accountNumber);
  90 +
  91 + if (result < 0)
  92 + {
  93 + logger.Fatal("Unable to update LicenseTermAccepted status for AccountNumber =" + accountNumber);
  94 + }
93 95  
94 96 return result;
95 97 }
... ... @@ -106,10 +108,10 @@ namespace AIAHTML5.API.Models
106 108 logger.Debug("inside getUserDetails for loginId =" + credentials["username"].ToString() + " and password= " + credentials["password"].ToString());
107 109 User userDetails = null;
108 110  
109   -
110   - userDetails = DBModel.GetUserDetailsByLoginId(credentials["username"].ToString());
111 111  
112   - return userDetails;
  112 + userDetails = DBModel.GetUserDetailsByLoginId(credentials["username"].ToString());
  113 +
  114 + return userDetails;
113 115 }
114 116  
115 117 internal static void getLicenseIdForThisUser(int userId, out int licenseId, out int editionId)
... ... @@ -120,18 +122,18 @@ namespace AIAHTML5.API.Models
120 122 licenseId = 0;
121 123 editionId = 0;
122 124  
123   -
124 125  
125   - DBModel objModel = new DBModel();
126   - Hashtable licenseEditionHash = objModel.GetLicenseDetailByUserId(userId);
127 126  
128   - if (licenseEditionHash.ContainsKey(AIAConstants.LICENSE_KEY_ID))
129   - licenseId = Convert.ToInt32(licenseEditionHash[AIAConstants.LICENSE_KEY_ID]);
  127 + DBModel objModel = new DBModel();
  128 + Hashtable licenseEditionHash = objModel.GetLicenseDetailByUserId(userId);
  129 +
  130 + if (licenseEditionHash.ContainsKey(AIAConstants.LICENSE_KEY_ID))
  131 + licenseId = Convert.ToInt32(licenseEditionHash[AIAConstants.LICENSE_KEY_ID]);
  132 +
  133 + if (licenseEditionHash.ContainsKey(AIAConstants.EDITION_KEY_ID))
  134 + editionId = Convert.ToInt32(licenseEditionHash[AIAConstants.EDITION_KEY_ID]);
  135 +
130 136  
131   - if (licenseEditionHash.ContainsKey(AIAConstants.EDITION_KEY_ID))
132   - editionId = Convert.ToInt32(licenseEditionHash[AIAConstants.EDITION_KEY_ID]);
133   -
134   -
135 137 }
136 138  
137 139 internal static int insertLoginDetails(int userId)
... ... @@ -139,12 +141,12 @@ namespace AIAHTML5.API.Models
139 141 logger.Debug("inside insertLoginDetails for UserId =" + userId);
140 142  
141 143 int result = 0;
142   -
143   - DBModel objModel = new DBModel();
144 144  
145   - result = objModel.InsertLoginDetails(userId);
146   -
147   - return result;
  145 + DBModel objModel = new DBModel();
  146 +
  147 + result = objModel.InsertLoginDetails(userId);
  148 +
  149 + return result;
148 150 }
149 151  
150 152 internal static bool isUSerActive(User user)
... ... @@ -160,7 +162,7 @@ namespace AIAHTML5.API.Models
160 162 expirationDate = string.Empty;
161 163 bool isLicenseExpired = false;
162 164  
163   - if (subscriptionDetail!= null)
  165 + if (subscriptionDetail != null)
164 166 {
165 167 DateTime? subscriptionValidThrough = subscriptionDetail.SubscriptionValidThrough;
166 168 if (subscriptionValidThrough != null && subscriptionValidThrough.Value.Date >= DateTime.Now.Date)
... ... @@ -171,7 +173,7 @@ namespace AIAHTML5.API.Models
171 173 {
172 174 isLicenseExpired = true;
173 175 expirationDate = subscriptionDetail.SubscriptionValidThrough.Value.Date.ToString("MM/dd/yyyy").ToString();
174   - }
  176 + }
175 177 }
176 178 return isLicenseExpired;
177 179 }
... ... @@ -182,13 +184,13 @@ namespace AIAHTML5.API.Models
182 184  
183 185 ArrayList licensedModulesList = new ArrayList();
184 186  
185   -
186 187  
187   - DBModel objModel = new DBModel();
188   - licensedModulesList = objModel.GetUserModulesByLicenseId(licenseId);
189   -
190 188  
191   - return licensedModulesList;
  189 + DBModel objModel = new DBModel();
  190 + licensedModulesList = objModel.GetUserModulesByLicenseId(licenseId);
  191 +
  192 +
  193 + return licensedModulesList;
192 194 }
193 195  
194 196 internal static int deletePastWrongAttempts(int userId)
... ... @@ -197,10 +199,10 @@ namespace AIAHTML5.API.Models
197 199  
198 200 int result = 0;
199 201  
200   -
201   - DBModel objModel = new DBModel();
202   - result = objModel.DeleteIncorrectLoginAttempts(userId);
203   - return result;
  202 +
  203 + DBModel objModel = new DBModel();
  204 + result = objModel.DeleteIncorrectLoginAttempts(userId);
  205 + return result;
204 206 }
205 207  
206 208 internal static int checkNoOfWrongAttempts(int userId)
... ... @@ -209,10 +211,10 @@ namespace AIAHTML5.API.Models
209 211  
210 212 int incorrectLoginAttemptCount = 0;
211 213  
212   -
213   - DBModel objModel = new DBModel();
214   - incorrectLoginAttemptCount = objModel.GetIncorrectLoginAttempts(userId);
215   - return incorrectLoginAttemptCount;
  214 +
  215 + DBModel objModel = new DBModel();
  216 + incorrectLoginAttemptCount = objModel.GetIncorrectLoginAttempts(userId);
  217 + return incorrectLoginAttemptCount;
216 218 }
217 219  
218 220 internal static int saveWrongAttemptOfUser(int userId, int previousIncorrectLoginAttempts)
... ... @@ -220,18 +222,18 @@ namespace AIAHTML5.API.Models
220 222 logger.Debug("inside saveWrongAttemptofUser for UserId =" + userId);
221 223 int result = 0;
222 224  
223   -
224   - DBModel objModel = new DBModel();
225 225  
226   - if (previousIncorrectLoginAttempts < 1)
227   - {
228   - result = objModel.InsertIncorrectLoginAttempts(userId);
229   - }
230   - else
231   - {
232   - result = objModel.UpdateIncorrectLoginAttempts(userId);
233   - }
234   -
  226 + DBModel objModel = new DBModel();
  227 +
  228 + if (previousIncorrectLoginAttempts < 1)
  229 + {
  230 + result = objModel.InsertIncorrectLoginAttempts(userId);
  231 + }
  232 + else
  233 + {
  234 + result = objModel.UpdateIncorrectLoginAttempts(userId);
  235 + }
  236 +
235 237  
236 238 return result;
237 239 }
... ... @@ -241,16 +243,16 @@ namespace AIAHTML5.API.Models
241 243 logger.Debug("inside isLicenseActive for LicenseId =" + licenseId);
242 244 bool result = false;
243 245  
244   - DBModel objModel = new DBModel();
245   - License userLicense = objModel.GetLicenseDetailsByLicenseId(licenseId);
  246 + DBModel objModel = new DBModel();
  247 + License userLicense = objModel.GetLicenseDetailsByLicenseId(licenseId);
246 248  
247 249  
248   - if (userLicense.IsActive)
249   - result = true;
250   - else
251   - result = false;
252   -
253   - return result;
  250 + if (userLicense.IsActive)
  251 + result = true;
  252 + else
  253 + result = false;
  254 +
  255 + return result;
254 256 }
255 257  
256 258 internal static License getLicenseDetails(int licenseId)
... ... @@ -259,11 +261,11 @@ namespace AIAHTML5.API.Models
259 261  
260 262 License userLicense = null;
261 263  
262   -
263   - DBModel objModel = new DBModel();
264   - userLicense = objModel.GetLicenseDetailsByLicenseId(licenseId);
265   -
266   - return userLicense;
  264 +
  265 + DBModel objModel = new DBModel();
  266 + userLicense = objModel.GetLicenseDetailsByLicenseId(licenseId);
  267 +
  268 + return userLicense;
267 269 }
268 270  
269 271 internal static LicenseSubscriptionDetails getLicenseSubscriptionDetails(int licenseId)
... ... @@ -272,19 +274,19 @@ namespace AIAHTML5.API.Models
272 274  
273 275 LicenseSubscriptionDetails userSubscriptionDetail = null;
274 276  
275   -
276   - DBModel objModel = new DBModel();
277   - userSubscriptionDetail = objModel.GetLicenseSubscriptionDetailsByLicenseId(licenseId);
278   -
  277 +
  278 + DBModel objModel = new DBModel();
  279 + userSubscriptionDetail = objModel.GetLicenseSubscriptionDetailsByLicenseId(licenseId);
  280 +
279 281 return userSubscriptionDetail;
280 282 }
281 283  
282 284 internal static void isCredentialCorrect(Newtonsoft.Json.Linq.JObject credentials, User userInfo, out bool isCorrectLoginId, out bool isCorrectPassword)
283 285 {
284 286 isCorrectLoginId = false;
285   - isCorrectPassword = false;
  287 + isCorrectPassword = false;
286 288  
287   - if (userInfo.Id> 0)
  289 + if (userInfo.Id > 0)
288 290 {
289 291 if (string.Equals(credentials["username"].ToString().ToUpper(), userInfo.LoginId.ToUpper()))
290 292 isCorrectLoginId = true;
... ... @@ -302,10 +304,10 @@ namespace AIAHTML5.API.Models
302 304  
303 305 int result = 0;
304 306  
305   -
306   - DBModel objModel = new DBModel();
307   - result = objModel.InsertUserLoginLog(accountNumber, failureId, null, edition, null);
308   -
  307 +
  308 + DBModel objModel = new DBModel();
  309 + result = objModel.InsertUserLoginLog(accountNumber, failureId, null, edition, null);
  310 +
309 311 return result;
310 312 }
311 313  
... ... @@ -316,21 +318,21 @@ namespace AIAHTML5.API.Models
316 318  
317 319 ArrayList arrTermsOfService = new ArrayList();
318 320  
319   - DBModel objModel = new DBModel();
320   - arrTermsOfService = DBModel.GetTermsAndConditions();
321   -
  321 + DBModel objModel = new DBModel();
  322 + arrTermsOfService = DBModel.GetTermsAndConditions();
  323 +
322 324 return arrTermsOfService;
323 325 }
324 326  
325 327 internal static ArrayList getAllModulesList()
326 328 {
327 329 logger.Debug("inside getAllModulesList");
328   - ArrayList modulesList = new ArrayList ();
  330 + ArrayList modulesList = new ArrayList();
  331 +
  332 +
  333 + DBModel objModel = new DBModel();
  334 + modulesList = objModel.GetAllModules();
329 335  
330   -
331   - DBModel objModel = new DBModel();
332   - modulesList = objModel.GetAllModules();
333   -
334 336 return modulesList;
335 337 }
336 338  
... ... @@ -340,19 +342,261 @@ namespace AIAHTML5.API.Models
340 342 bool isUserBlocked = false;
341 343 blockTime = new DateTime();
342 344  
343   -
344   - DBModel objModel = new DBModel();
345   - BlockedUser blockedUser = objModel.GetUserBlockedStatusByUserId(userId);
346 345  
347   - if (blockedUser!= null)
  346 + DBModel objModel = new DBModel();
  347 + BlockedUser blockedUser = objModel.GetUserBlockedStatusByUserId(userId);
  348 +
  349 + if (blockedUser != null)
  350 + {
  351 + blockTime = blockedUser.LoginTime;
  352 + isUserBlocked = true;
  353 + }
  354 + else
  355 + isUserBlocked = false;
  356 +
  357 + return isUserBlocked;
  358 + }
  359 +
  360 +
  361 +
  362 + public static int ValidateLicenseSiteIP(string strLicenseSiteIP, string remoteIpAddress, string strAccountNumber, byte editionId)
  363 + {
  364 + if (strLicenseSiteIP == null)
  365 + strLicenseSiteIP = remoteIpAddress;
  366 +
  367 + int intReturn = 0;
  368 + DBModel objDBModel = new DBModel();
  369 + DataTable dtLicense = objDBModel.GetLicenseInfoBySiteUrl(strAccountNumber, (byte)editionId);
  370 +
  371 + if (dtLicense.Rows.Count > 0)
  372 + {
  373 + //strLicenseSiteIP
  374 + String strSiteIP = "";
  375 + String strSiteIPTo = "";
  376 + String strSiteMIPTo = "";
  377 +
  378 + IPAddress[] arrHostIP = new IPAddress[2];
  379 + try
348 380 {
349   - blockTime = blockedUser.LoginTime;
350   - isUserBlocked = true;
  381 + arrHostIP.SetValue(IPAddress.Parse(remoteIpAddress), 0);
  382 + arrHostIP.SetValue(IPAddress.Parse(strLicenseSiteIP), 1);
351 383 }
352   - else
353   - isUserBlocked = false;
354   -
355   - return isUserBlocked;
  384 + catch (Exception e)
  385 + {
  386 + //NOTE: if no domain name found we try to resolve by IP.
  387 + //arrHostIP.SetValue(Dns.GetHostAddresses(strLicenseSiteIP),1); //I SHould remove this feature it is useless
  388 + };
  389 +
  390 + // foreach (IPAddress address in arrHostIP)
  391 + foreach (IPAddress address in arrHostIP)
  392 + {
  393 + if (address == null)
  394 + continue;
  395 + String ipStr = address.ToString();
  396 + if (ipStr == "::1" || ipStr == "") continue;
  397 + foreach (DataRow objLicenseRow in dtLicense.Rows)
  398 + {
  399 + strSiteIP = (String.IsNullOrEmpty(objLicenseRow["SiteIp"].ToString()) ? "" : objLicenseRow["SiteIp"].ToString());
  400 + strSiteIPTo = (String.IsNullOrEmpty(objLicenseRow["SiteIPTo"].ToString()) ? "" : objLicenseRow["SiteIPTo"].ToString());
  401 + //if (String.IsNullOrEmpty(objLicenseRow.SiteIPTo) == false)
  402 + //strSiteIPTo = objLicenseRow.SiteIPTo;
  403 + strSiteMIPTo = (String.IsNullOrEmpty(objLicenseRow["SiteMasterIPTo"].ToString()) ? "" : objLicenseRow["SiteMasterIPTo"].ToString());
  404 + if (IPValidator.ValidateIP(strSiteIP.ToLower(), strSiteIPTo.ToLower(), strSiteMIPTo.ToLower(), ipStr.ToLower(), Convert.ToInt16(objLicenseRow["IsMaster"])) == true)
  405 + {
  406 + intReturn = Convert.ToInt32(objLicenseRow["Id"]);
  407 + return intReturn;
  408 + }
  409 + }
  410 + }
  411 +
  412 + if (IPValidator.IsNumericIP(strLicenseSiteIP) == false)
  413 + {
  414 + foreach (DataRow objLicenseRow in dtLicense.Rows)
  415 + {
  416 + strSiteIP = (String.IsNullOrEmpty(objLicenseRow["SiteIp"].ToString()) ? "" : objLicenseRow["SiteIp"].ToString());
  417 + // strSiteIPTo = (String.IsNullOrEmpty(objLicenseRow.SiteIPTo) ? "" : objLicenseRow.SiteIPTo);
  418 + if (String.IsNullOrEmpty(objLicenseRow["SiteIPTo"].ToString()) == false)
  419 + strSiteIPTo = objLicenseRow["SiteIPTo"].ToString();
  420 + strSiteMIPTo = (String.IsNullOrEmpty(objLicenseRow["SiteMasterIPTo"].ToString()) ? "" : objLicenseRow["SiteMasterIPTo"].ToString());
  421 + // if provided ip is not numeric, then compare directly with all the fields
  422 + if ((strLicenseSiteIP.ToLower() == strSiteIP.ToLower()) ||
  423 + (strLicenseSiteIP.ToLower() == IPValidator.FormatURLToIP(strSiteIP).ToLower()) ||
  424 + (strLicenseSiteIP.ToLower() == strSiteIPTo.ToLower()) ||
  425 + (strLicenseSiteIP.ToLower() == IPValidator.FormatURLToIP(strSiteIPTo).ToLower()) ||
  426 + (strLicenseSiteIP.ToLower() == strSiteMIPTo.ToLower()) ||
  427 + (strLicenseSiteIP.ToLower() == IPValidator.FormatURLToIP(strSiteMIPTo).ToLower()))
  428 + {
  429 + intReturn = Convert.ToInt32(objLicenseRow["Id"]);
  430 + return intReturn;
  431 + }
  432 + }
  433 + }
  434 + }
  435 + return intReturn;
  436 + }
  437 +
  438 + public static User ValidateSiteLogin(String strSiteIP, String strAcccountNumber, String strUrlReferer, string strEdition, int intSiteId)
  439 + {
  440 + Int32 intUserId = 0;
  441 + bool isExpired = false;
  442 + User userInfo = null;
  443 + //try {
  444 + Int16 intErrorID = ErrorHelper.E_NO_ERROR;
  445 + String strStatus = AIAConstants.STATUS_OK;
  446 +
  447 + int intLicenseId = 0;
  448 + int intEditionId = Convert.ToInt16(strEdition);
  449 +
  450 + DateTime dtLogDate = DateTime.Now;
  451 + //strSiteIP = (String)objRequest.GetData(AIAConstants.SITE_IP);
  452 + //strAcccountNumber = (String)objRequest.GetData(AIAConstants.ACCOUNT_NUMBER);
  453 + //intEditionId = Convert.ToInt16(objRequest.GetData(AIAConstants.EDITION_ID));
  454 + //strUrlReferer = (String)objRequest.GetData(AIAConstants.URL_REFERER);
  455 + //strEdition = (String)objRequest.GetData(AIAConstants.EDITION_ID);
  456 + //intSiteId = (Int32)objRequest.GetData(AIAConstants.SITE_ID);
  457 + //AdminDAL.AdminDal.GetLicenseBySiteIdDataTable dtLicense = new ADAM.AIA50.AdminDAL.AdminDal.GetLicenseBySiteIdDataTable();
  458 + if (string.IsNullOrEmpty(strAcccountNumber))
  459 + {
  460 + //----logAuthenticationTryForAccountNumber(strAcccountNumber, dtLogDate, ErrorHelper.ACCOUNT_NUMBER_NOT_NULL, strSiteIP, strEdition, strUrlReferer);
  461 + //intErrorID = ErrorHelper.E_ACCOUNT_NUMBER_NOT_NULL;
  462 + //strStatus = AIAConstants.STATUS_NOT_OK;
  463 +
  464 + userInfo.LoginFailureCauseId = ErrorHelper.E_ACCOUNT_NUMBER_NOT_NULL;
  465 + }
  466 + else if (string.IsNullOrEmpty(strEdition))
  467 + {
  468 + strEdition = "0";
  469 + //----logAuthenticationTryForAccountNumber(strAcccountNumber, dtLogDate, ErrorHelper.EDITION_ID_NOT_NULL, strSiteIP, strEdition, strUrlReferer);
  470 + //intErrorID = ErrorHelper.E_EDITION_ID_NOT_NULL;
  471 + //strStatus = AIAConstants.STATUS_NOT_OK;
  472 + userInfo.LoginFailureCauseId = ErrorHelper.E_EDITION_ID_NOT_NULL;
  473 +
  474 + }
  475 + else
  476 + {
  477 + DBModel objDBModel = new DBModel();
  478 + DataTable dtLicense = objDBModel.GetLicenseBySiteId(intSiteId);
  479 + if (dtLicense.Rows.Count > 0)
  480 + {
  481 + //foreach (DataRow licRow in dtLicense.Rows)
  482 + //{
  483 + DataRow licRow = dtLicense.Rows[0];
  484 + //isExpired = LicenseHelper.IsLicenseExpired(licRow["Id"]);
  485 + userInfo = new User();
  486 + userInfo.LicenseInfo = AIAHTML5.API.Models.Users.getLicenseDetails(Convert.ToInt32(licRow["Id"]));
  487 +
  488 + if (userInfo.LicenseInfo != null)
  489 + {
  490 + //05.3 get licenseSubscription details
  491 + userInfo.LicenseSubscriptions = AIAHTML5.API.Models.Users.getLicenseSubscriptionDetails( userInfo.LicenseInfo.Id);
  492 +
  493 + //05.4 check the License expiration irespective of either user is active or not because on AIA
  494 + //we shows the License expiration message for inactive users too
  495 +
  496 +
  497 + if (userInfo.LicenseSubscriptions != null)
  498 + {
  499 + DateTime? subscriptionValidThrough = userInfo.LicenseSubscriptions.SubscriptionValidThrough;
  500 + if (subscriptionValidThrough != null && subscriptionValidThrough.Value.Date >= DateTime.Now.Date)
  501 + {
  502 + isExpired = false;
  503 + }
  504 + else
  505 + {
  506 + isExpired = true;
  507 + }
  508 + }
  509 +
  510 +
  511 +
  512 + if (!isExpired && Convert.ToBoolean(licRow["IsActive"]) == true)
  513 + {
  514 + //User objUserContext = new User();
  515 + userInfo.Id = 0;
  516 + userInfo.FirstName = licRow["LicenseeFirstName"].ToString();
  517 + userInfo.LastName = licRow["LicenseeLastName"].ToString();
  518 + userInfo.UserTypeId = AIAConstants.SITE_USER;
  519 + if (licRow["EmailId"].ToString() != null)
  520 + {
  521 + userInfo.EmailId = licRow["EmailId"].ToString();
  522 + }
  523 + else
  524 + {
  525 + userInfo.EmailId = null;
  526 + }
  527 + userInfo.AccountNumber = strAcccountNumber;
  528 + userInfo.EditionId = (Byte)intEditionId;
  529 + userInfo.LicenseTypeId = (byte)licRow["LicenseTypeId"];
  530 + userInfo.LicenseId = Convert.ToInt32(licRow["Id"]);
  531 + userInfo.LoginId = "";
  532 + userInfo.Modesty = (bool)licRow["IsModesty"];
  533 + //Retreive ModestyMode
  534 + userInfo.ModestyMode = false;
  535 +
  536 + intLicenseId = Convert.ToInt32(licRow["Id"]);
  537 +
  538 +
  539 + DataTable dtblEditionForModesty = new DBModel().GetEditionsForModesty(userInfo.LicenseId, 0);
  540 + //This table result set should return always have 0 or 1 record if modesty mode is present.
  541 + foreach (DataRow drEditionForModesty in dtblEditionForModesty.Rows)
  542 + {
  543 + if ((bool)drEditionForModesty["IsModesty"])
  544 + {
  545 + userInfo.Modesty = true;
  546 + userInfo.ModestyMode = true;
  547 + }
  548 + }
  549 +
  550 + // get edition features details
  551 + userInfo.objEditionFeatures = objDBModel.GetEditionFeatures((Byte)intEditionId);
  552 +
  553 +
  554 +
  555 + if (intLicenseId > 0)
  556 + userInfo.Modules = getModuleListByLicenseId(intLicenseId);
  557 + else
  558 + userInfo.Modules = getAllModulesList();
  559 +
  560 + // objResponse.AddData(LoginConst.USER_CONTEXT, objUserContext);
  561 +
  562 +
  563 + // Hashtable arrModuleList = LicenseHelper.GetInstance().GetAllModuleByLicenseId(objLicenseRow.Id);
  564 + //if (arrModuleList[9].Equals(true)) {
  565 + // SessionManager.GetInstance().AddModSession("ModuleNameIP10", "IP10");
  566 + //}
  567 +
  568 + //logAuthenticationTryForAccountNumber(strAcccountNumber, dtLogDate, 0, strSiteIP, strEdition, strUrlReferer);
  569 + }
  570 + else
  571 + {
  572 + // logAuthenticationTryForAccountNumber(strAcccountNumber, dtLogDate, ErrorHelper.LICENSE_INACTIVE, strSiteIP, Convert.ToString(intEditionId), strUrlReferer);
  573 + // intErrorID = ErrorHelper.E_LICENCE_IS_INACTIVE;
  574 + // strStatus = AIAConstants.STATUS_NOT_OK;
  575 + userInfo.LoginFailureCauseId = ErrorHelper.LICENSE_INACTIVE;
  576 + }
  577 + }
  578 + else
  579 + {
  580 +
  581 + // intErrorID = ErrorHelper.E_EDITION_NOT_LINKED_WITH_SITE;
  582 + // strStatus = AIAConstants.STATUS_NOT_OK;
  583 + userInfo.LoginFailureCauseId = ErrorHelper.E_EDITION_NOT_LINKED_WITH_SITE;
  584 + }
  585 + //}
  586 + }
  587 + }
  588 + //objResponse.ErrorCode = intErrorID;
  589 + //objResponse.Status = strStatus;
  590 + //objResponse.ErrorDesc = ErrorHelper.GetInstance().GetErrorDescriptionHelper(intErrorID).ToString();
  591 + //} catch (Exception objExp) {
  592 + // objResponse.Status = GlobalConstant.STATUS_NOT_OK;
  593 + // objResponse.ErrorCode = GlobalConstant.RUN_TIME_EXCEPTION;
  594 + // objResponse.strErrorDesc = objExp.Message;
  595 + //}
  596 + //if (isExpired != null && (bool)isExpired["result"])
  597 + // objResponse.strErrorDesc = objResponse.strErrorDesc.Replace("{0}", (string)isExpired["date"]);
  598 + //return intUserId;
  599 + return userInfo;
356 600 }
357 601 }
358 602 }
359 603 \ No newline at end of file
... ...
400-SOURCECODE/AIAHTML5.Web/AIAHTML5.Web.csproj
... ... @@ -45202,7 +45202,8 @@
45202 45202 <Content Include="content\scripts\js\custom\main.js" />
45203 45203 <Content Include="content\data\json\da\vocab\Swedish\cm_dat_vocabterm_3.json" />
45204 45204 <None Include="content\data\json\le\qz_dat_ca.json" />
45205   - <Content Include="index.html" />
  45205 + <Content Include="index.aspx" />
  45206 + <Content Include="index1.html" />
45206 45207 <Content Include="libs\angular-drag-and-drop-lists.js" />
45207 45208 <Content Include="libs\angular-ui\css\slider.css" />
45208 45209 <Content Include="libs\angular-ui\js\slider.js" />
... ... @@ -45445,6 +45446,20 @@
45445 45446 <HintPath>..\packages\log4net.2.0.7\lib\net45-full\log4net.dll</HintPath>
45446 45447 <Private>True</Private>
45447 45448 </Reference>
  45449 + <Reference Include="System" />
  45450 + <Reference Include="System.Data" />
  45451 + <Reference Include="System.Drawing" />
  45452 + <Reference Include="System.Web" />
  45453 + <Reference Include="System.Xml" />
  45454 + </ItemGroup>
  45455 + <ItemGroup>
  45456 + <Compile Include="index.aspx.cs">
  45457 + <DependentUpon>index.aspx</DependentUpon>
  45458 + <SubType>ASPXCodeBehind</SubType>
  45459 + </Compile>
  45460 + <Compile Include="index.aspx.designer.cs">
  45461 + <DependentUpon>index.aspx</DependentUpon>
  45462 + </Compile>
45448 45463 </ItemGroup>
45449 45464 <PropertyGroup>
45450 45465 <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
... ...
400-SOURCECODE/AIAHTML5.Web/Web.config
... ... @@ -49,6 +49,7 @@
49 49 <defaultDocument enabled="true">
50 50 <files>
51 51 <clear />
  52 + <add value="index.aspx" />
52 53 <add value="index.html" />
53 54 <add value="login.html" />
54 55 <add value="Default.asp" />
... ...
400-SOURCECODE/AIAHTML5.Web/app/controllers/CurrBuildController.js
1   -AIA.controller("CurrBuildController", ["$scope", "$rootScope", "pages", "$log", "Modules", "$http", "$compile", "$location",
2   -function ($scope, $rootScope, pages, log, Modules, $http, $compile, $location) {
3   -
4   - // $rootScope.currentActiveModuleTitle = pages[6].name;
5   - $scope.showTabButton = false;
6   - $scope.listCurriculumBuilder = null;
7   - $scope.dataPopup = null;
8   - $scope.countLeftlist;
9   - $scope.countRightlist;
10   - $scope.IsVisible = function () {
11   - $scope.scroll();
12   -
13   - }
14   -
15   - $scope.scroll = function () {
16   - // $window.scrollTo(0, 0);
17   - $("html,body").scrollTop(0);
18   - //alert("scroll");
19   - }
20   - //load json data
21   - $scope.loadCurriculumBuiderData = function () {
22   -
23   - if ($rootScope.refreshcheck == null) {
24   - $location.path('/');
25   - }
26   - //get current path
27   - var currentURL = $location.path();
28   - var selectedModuleName = '';
29   - //set module title
30   - angular.forEach($rootScope.userModules, function (value, key) {
31   - if (value.slug === currentURL.replace('/', '')) {
32   - selectedModuleName = value.name;
33   - }
34   - $rootScope.currentActiveModuleTitle = selectedModuleName;
35   - })
36   -
37   - //get current path
38   - var currentURL = $location.path();
39   -
40   - $http({ method: 'GET', url: 'content/data/json/cb/cb_list_content.json' }).success(function (data) {
41   -
42   - $scope.listCurriculumBuilder = data;
43   - //load default body view list
44   - $scope.getCBViewList();
45   - })
46   - .error(function (data, status, headers, config) {
47   - console.log(data);
48   - });
49   - }
50   - //get CB body view list
51   - $scope.getCBViewList = function ($event) {
52   -
53   - $('#leftBodyViewList').empty();
54   - $scope.countLeftlist = Object.keys($scope.listCurriculumBuilder.slideshows.slideshow).length / 2;
55   - $scope.loadleftBodyViewList = new jinqJs()
56   - .from($scope.listCurriculumBuilder.slideshows.slideshow)
57   - .select();
58   - for (var i = 0; i < $scope.countLeftlist; i++) {
59   - console.log($scope.listCurriculumBuilder.slideshows.slideshow[i]._label);
60   - //alert($scope.listCurriculumBuilder.slideshows.slideshow[i]._label);
61   - var $el = $('<li class="list-group-item" data-toggle="modal" data-target="#myModal-1" ng-click="loadSlideShowXmldata()"><a href="#"><i class="fa fa-check"></i>' + $scope.listCurriculumBuilder.slideshows.slideshow[i]._label + '</a></li>').appendTo('#leftBodyViewList');
62   - $compile($el)($scope);
63   - }
64   -
65   - $scope.countRightlist = Object.keys($scope.listCurriculumBuilder.slideshows.slideshow).length;
66   - for (var i = $scope.countLeftlist; i < $scope.countRightlist; i++) {
67   - console.log($scope.listCurriculumBuilder.slideshows.slideshow[i]._label);
68   - var $el1 = $('<li class="list-group-item" data-toggle="modal" ng-click="loadSlideShowXmldata()" data-target="#myModal-1"><a href="#"><i class="fa fa-check"></i>' + $scope.listCurriculumBuilder.slideshows.slideshow[i]._label + '</a></li>').appendTo('#rightBodyViewList');
69   - $compile($el)($scope);
70   - }
71   -
72   - }
73   -
74   - $scope.loadSlideShowXmldata = function (e) {
75   -
76   - // alert(e);
77   - $http({ method: 'GET', url: 'content/data/json/cb/SlideShow/AIA_Curriculum_Builder_Guide.sldshw' }).success(function (data) {
78   -
79   - $scope.dataPopup = data;
80   - alert($scope.dataPopup);
81   - })
82   - .error(function (data, status, headers, config) {
83   - console.log(data);
84   - });
85   - }
86   -}]
87   -
88   -
89   -
  1 +AIA.controller("CurrBuildController", ["$scope", "$rootScope", "pages", "$log", "Modules", "$http", "$compile", "$location",
  2 +function ($scope, $rootScope, pages, log, Modules, $http, $compile, $location) {
  3 +
  4 + // $rootScope.currentActiveModuleTitle = pages[6].name;
  5 + $scope.showTabButton = false;
  6 + $scope.listCurriculumBuilder = null;
  7 + $scope.dataPopup = null;
  8 + $scope.countLeftlist;
  9 + $scope.countRightlist;
  10 + $scope.IsVisible = function () {
  11 + $scope.scroll();
  12 +
  13 + }
  14 +
  15 + $scope.scroll = function () {
  16 + // $window.scrollTo(0, 0);
  17 + $("html,body").scrollTop(0);
  18 + //alert("scroll");
  19 + }
  20 +
  21 + $scope.openAIAFlexCB = function () {
  22 + var userInfo = ($rootScope.userData);
  23 +
  24 +
  25 + var key = CryptoJS.enc.Base64.parse("MTIzNDU2NzgxMjM0NTY3OA");
  26 + var iv = CryptoJS.enc.Base64.parse("EBESExQVFhcYGRobHB0eHw");
  27 +
  28 + var encryptedUserName = CryptoJS.AES.encrypt(userInfo.LoginId, key, { iv: iv });
  29 + var encryptedPassword = CryptoJS.AES.encrypt(userInfo.Password, key, { iv: iv });
  30 +
  31 + $location.url('/');
  32 +
  33 + window.open('http://qa.interactiveanatomy.com/Default.aspx?un=' + encryptedUserName + '&up=' + encryptedPassword);
  34 +
  35 + }
  36 + //load json data
  37 + $scope.loadCurriculumBuiderData = function () {
  38 +
  39 + if ($rootScope.refreshcheck == null) {
  40 + $location.path('/');
  41 + }
  42 + //get current path
  43 + var currentURL = $location.path();
  44 + var selectedModuleName = '';
  45 + //set module title
  46 + angular.forEach($rootScope.userModules, function (value, key) {
  47 + if (value.slug === currentURL.replace('/', '')) {
  48 + selectedModuleName = value.name;
  49 + }
  50 + $rootScope.currentActiveModuleTitle = selectedModuleName;
  51 + })
  52 +
  53 + //get current path
  54 + var currentURL = $location.path();
  55 +
  56 + $http({ method: 'GET', url: 'content/data/json/cb/cb_list_content.json' }).success(function (data) {
  57 +
  58 + $scope.listCurriculumBuilder = data;
  59 + //load default body view list
  60 + $scope.getCBViewList();
  61 + })
  62 + .error(function (data, status, headers, config) {
  63 + console.log(data);
  64 + });
  65 + }
  66 + //get CB body view list
  67 + $scope.getCBViewList = function ($event) {
  68 +
  69 + $('#leftBodyViewList').empty();
  70 + $scope.countLeftlist = Object.keys($scope.listCurriculumBuilder.slideshows.slideshow).length / 2;
  71 + $scope.loadleftBodyViewList = new jinqJs()
  72 + .from($scope.listCurriculumBuilder.slideshows.slideshow)
  73 + .select();
  74 + for (var i = 0; i < $scope.countLeftlist; i++) {
  75 + console.log($scope.listCurriculumBuilder.slideshows.slideshow[i]._label);
  76 + //alert($scope.listCurriculumBuilder.slideshows.slideshow[i]._label);
  77 + var $el = $('<li class="list-group-item" data-toggle="modal" data-target="#myModal-1" ng-click="loadSlideShowXmldata()"><a href="#"><i class="fa fa-check"></i>' + $scope.listCurriculumBuilder.slideshows.slideshow[i]._label + '</a></li>').appendTo('#leftBodyViewList');
  78 + $compile($el)($scope);
  79 + }
  80 +
  81 + $scope.countRightlist = Object.keys($scope.listCurriculumBuilder.slideshows.slideshow).length;
  82 + for (var i = $scope.countLeftlist; i < $scope.countRightlist; i++) {
  83 + console.log($scope.listCurriculumBuilder.slideshows.slideshow[i]._label);
  84 + var $el1 = $('<li class="list-group-item" data-toggle="modal" ng-click="loadSlideShowXmldata()" data-target="#myModal-1"><a href="#"><i class="fa fa-check"></i>' + $scope.listCurriculumBuilder.slideshows.slideshow[i]._label + '</a></li>').appendTo('#rightBodyViewList');
  85 + $compile($el)($scope);
  86 + }
  87 +
  88 + }
  89 +
  90 + $scope.loadSlideShowXmldata = function (e) {
  91 +
  92 + // alert(e);
  93 + $http({ method: 'GET', url: 'content/data/json/cb/SlideShow/AIA_Curriculum_Builder_Guide.sldshw' }).success(function (data) {
  94 +
  95 + $scope.dataPopup = data;
  96 + alert($scope.dataPopup);
  97 + })
  98 + .error(function (data, status, headers, config) {
  99 + console.log(data);
  100 + });
  101 + }
  102 +}]
  103 +
  104 +
  105 +
90 106 );
91 107 \ No newline at end of file
... ...
400-SOURCECODE/AIAHTML5.Web/app/controllers/HomeController.js
1 1 'use strict';
2 2  
3   -AIA.controller("HomeController", ["$rootScope", "$scope", "Modules", "$log", "$location", "$timeout", "DataService", "AuthenticationService", "LoginConstants", "UserModules", "LoginMessageConstants", "AdminService", "$http", "AdminConstants", "UserTypeConstants", "AIAConstants",
4   -function ($rootScope, $scope, Modules, $log, $location, $timeout, DataService, AuthenticationService, LoginConstants, UserModules, LoginMessageConstants, AdminService, $http, AdminConstants, UserTypeConstants,AIAConstants) {
  3 +AIA.controller("HomeController", ["$rootScope", "$scope", "Modules", "$log", "$location", "$timeout", "DataService", "AuthenticationService","ConfigurationService", "LoginConstants", "UserModules", "LoginMessageConstants", "AdminService", "$http", "AdminConstants", "UserTypeConstants", "AIAConstants",
  4 +function ($rootScope, $scope, Modules, $log, $location, $timeout, DataService, AuthenticationService,ConfigurationService, LoginConstants, UserModules, LoginMessageConstants, AdminService, $http, AdminConstants, UserTypeConstants,AIAConstants) {
5 5  
6 6 //$scope.pageToOpen = {
7 7 // name: 'MainMenu'
... ... @@ -92,6 +92,18 @@ function ($rootScope, $scope, Modules, $log, $location, $timeout, DataService, A
92 92 userLicenseId: 0,
93 93 licenseeAccountNumber: null
94 94 };
  95 +
  96 + $rootScope.siteUrlInfo = {
  97 + siteIP: null,
  98 + remoteIPAddress:null,
  99 + status: null,
  100 + accountNumber: null,
  101 + edition: null,
  102 + urlReferer: null,
  103 + calsCreds: null,
  104 + userId: null,
  105 + password:null
  106 + }
95 107 $rootScope.userData;
96 108 $rootScope.userModules;
97 109 $rootScope.passwordMismatchMessage;
... ... @@ -121,27 +133,32 @@ function ($rootScope, $scope, Modules, $log, $location, $timeout, DataService, A
121 133  
122 134 }
123 135  
124   -
  136 +
125 137 $rootScope.initializeAIA = function () {
126   -
127   - if (navigator.cookieEnabled) {
128   -
129   - $rootScope.isLoading = false;
  138 + if (params != null && params != undefined && params!="") {
  139 +
  140 + $scope.ValidateClientSiteUrl();
  141 + }
130 142  
131   - var url = $location.url();
  143 + else {
  144 + if (navigator.cookieEnabled) {
132 145  
133   - //unblock user
134   - if (url.indexOf('?unb:') != -1) {
  146 + $rootScope.isLoading = false;
135 147  
136   - $rootScope.isVisibleLogin = true;
137   - $rootScope.UnblockUser();
138   - }
139   - else if (url.indexOf('?em:') != -1) {
  148 + var url = $location.url();
140 149  
141   - $rootScope.isVisibleLogin = false;
142   - $rootScope.isVisibleResetPass = true;
143   - }
144   - else {
  150 + //unblock user
  151 + if (url.indexOf('?unb:') != -1) {
  152 +
  153 + $rootScope.isVisibleLogin = true;
  154 + $rootScope.UnblockUser();
  155 + }
  156 + else if (url.indexOf('?em:') != -1) {
  157 +
  158 + $rootScope.isVisibleLogin = false;
  159 + $rootScope.isVisibleResetPass = true;
  160 + }
  161 + else {
145 162  
146 163 $rootScope.isVisibleLogin = true;
147 164 $rootScope.isVisibleResetPass = false;
... ... @@ -152,7 +169,7 @@ function ($rootScope, $scope, Modules, $log, $location, $timeout, DataService, A
152 169 AuthenticateAlreadyLoggedInUser();
153 170 }
154 171 var isRememberChecked = $rootScope.getLocalStorageValue('isRememberMeChecked');
155   -
  172 +
156 173 if ($rootScope.getLocalStorageValue('isRememberMeChecked') != "" && sessionStorage.getItem("loginSession") == null) {
157 174 sessionStorage.setItem("loginSession", "true");
158 175 }
... ... @@ -162,21 +179,22 @@ function ($rootScope, $scope, Modules, $log, $location, $timeout, DataService, A
162 179 $rootScope.userInfo = { username: $rootScope.getLocalStorageValue('RememberMeLoginId'), password: $rootScope.getLocalStorageValue('RememberMePassword'), rememberChk: true };
163 180 }, 800);
164 181 }
  182 + }
165 183 }
166   - }
167   -
168   - else {
169   -
170   - $rootScope.isVisibleLogin = true;
171 184  
172   - $rootScope.promptUserForCookies();
  185 + else {
  186 +
  187 + $rootScope.isVisibleLogin = true;
  188 +
  189 + $rootScope.promptUserForCookies();
  190 + }
  191 +
  192 + $rootScope.getConfigurationValues();
173 193 }
174   -
175   - $rootScope.getConfigurationValues();
176 194 }
177 195 $rootScope.getConfigurationValues = function ()
178 196 {
179   - AuthenticationService.getCofigValue()
  197 + ConfigurationService.getCofigValue()
180 198 .then(
181 199 function (configresult) {
182 200 $rootScope.current_year = configresult;
... ... @@ -285,7 +303,7 @@ function ($rootScope, $scope, Modules, $log, $location, $timeout, DataService, A
285 303 if (isCommingSoonModel == true)
286 304 {
287 305  
288   - ShowAssignedModulesPopup(result.Modules);
  306 + // ShowAssignedModulesPopup(result.Modules);
289 307  
290 308 if (userInfo.rememberChk) {
291 309  
... ... @@ -323,7 +341,7 @@ function ($rootScope, $scope, Modules, $log, $location, $timeout, DataService, A
323 341 if (isCommingSoonModel == true)
324 342 {
325 343  
326   - ShowAssignedModulesPopup(result.Modules);
  344 + // ShowAssignedModulesPopup(result.Modules);
327 345 }
328 346  
329 347 //4.
... ... @@ -381,6 +399,271 @@ function ($rootScope, $scope, Modules, $log, $location, $timeout, DataService, A
381 399  
382 400 }
383 401  
  402 +
  403 + $scope.ValidateClientSiteUrl = function () {
  404 +
  405 + debugger
  406 + var siteInfo = params.split('&');
  407 +
  408 + for (var i = 0; i < siteInfo.length; i++) {
  409 + debugger;
  410 + if (isCalsCredantialForSIte == "True") {
  411 + var paramInfo = siteInfo[i].split('=');
  412 + if (paramInfo[0] == 'calsCredantial') {
  413 +
  414 + $rootScope.siteUrlInfo.calsCreds = paramInfo[1];
  415 + console.log("$rootScope.siteUrlInfo.calsCreds" + $rootScope.siteUrlInfo.calsCreds);
  416 + }
  417 + else if (paramInfo[0] == 'username') {
  418 +
  419 + $rootScope.siteUrlInfo.username = paramInfo[1];
  420 + console.log("$rootScope.siteUrlInfo.username" + $rootScope.siteUrlInfo.username);
  421 + }
  422 + else if (paramInfo[0] == 'password') {
  423 +
  424 + $rootScope.siteUrlInfo.password = paramInfo[1];
  425 + console.log("$rootScope.siteUrlInfo.password " + $rootScope.siteUrlInfo.password);
  426 + }
  427 +
  428 + $rootScope.userInfo.username = $rootScope.siteUrlInfo.username;
  429 + $rootScope.userInfo.password = $rootScope.siteUrlInfo.password;
  430 + console.log("$rootScope.userInfo.username" + $rootScope.userInfo.username + " $rootScope.userInfo.password" + $rootScope.userInfo.password);
  431 +
  432 +
  433 + }
  434 + else {
  435 + var paramInfo = siteInfo[i].split('=');
  436 + if (paramInfo[0] == 'siteIP') {
  437 +
  438 + $rootScope.siteUrlInfo.siteIP = paramInfo[1];
  439 + console.log("$rootScope.siteUrlInfo.siteIP=" + $rootScope.siteUrlInfo.siteIP);
  440 + }
  441 + else if (paramInfo[0] == 'accountNumber') {
  442 +
  443 + $rootScope.siteUrlInfo.accountNumber = paramInfo[1];
  444 + console.log("$rootScope.siteUrlInfo.accountNumber=" + $rootScope.siteUrlInfo.accountNumber);
  445 + }
  446 + else if (paramInfo[0] == 'edition') {
  447 +
  448 + $rootScope.siteUrlInfo.edition = paramInfo[1];
  449 + console.log("$rootScope.siteUrlInfo.siteIP=" + $rootScope.siteUrlInfo.siteIP);
  450 + }
  451 + else if (paramInfo[0] == 'urlReferer') {
  452 +
  453 + $rootScope.siteUrlInfo.urlReferer = paramInfo[1];
  454 + console.log("$rootScope.siteUrlInfo.siteIP" + $rootScope.siteUrlInfo.siteIP);
  455 + }
  456 + else if (paramInfo[0] == 'remoteIPAddress') {
  457 +
  458 + $rootScope.siteUrlInfo.remoteIPAddress = paramInfo[1];
  459 + console.log("$rootScope.siteUrlInfo.remoteIPAddress" + $rootScope.siteUrlInfo.remoteIPAddress);
  460 + }
  461 +
  462 +
  463 + }
  464 + }
  465 + if (isCalsCredantialForSIte == "True") {
  466 + $rootScope.AuthenticateUser($rootScope.userInfo);
  467 + }
  468 + else {
  469 +
  470 +
  471 + console.log($rootScope.siteUrlInfo);
  472 +
  473 + AuthenticationService.validateClientSite($rootScope.siteUrlInfo)
  474 + .then(
  475 +
  476 + function (result) {
  477 + debugger;
  478 + console.log(result);
  479 + if (result != null) {
  480 +
  481 +
  482 + console.log(result);
  483 + if (result == LoginConstants.INVALID_CLIENT) {
  484 + $rootScope.isVisibleLogin = true;
  485 + $rootScope.errorMessage = LoginConstants.INVALID_CLIENT;
  486 + $("#messageModal").modal('show');
  487 + }
  488 + else if (result == LoginConstants.MSG_NOT_AUTHORIZE_SITE_USER) {
  489 + $rootScope.isVisibleLogin = true;
  490 + $rootScope.errorMessage = LoginConstants.MSG_NOT_AUTHORIZE_SITE_USER;
  491 + $("#messageModal").modal('show');
  492 + }
  493 +
  494 + else if (result.LoginFailureCauseId != undefined && result.LoginFailureCauseId.toString() == LoginConstants.E_ACCOUNT_NUMBER_NOT_NULL) {
  495 + $rootScope.isVisibleLogin = true;
  496 + $rootScope.errorMessage = LoginMessageConstants.E_ACCOUNT_NUMBER_NOT_NULL;
  497 + $("#messageModal").modal('show');
  498 + }
  499 + else if (result.LoginFailureCauseId != undefined && result.LoginFailureCauseId.toString() == LoginConstants.E_EDITION_ID_NOT_NULL) {
  500 + $rootScope.isVisibleLogin = true;
  501 + $rootScope.errorMessage = LoginMessageConstants.E_EDITION_ID_NOT_NULL;
  502 + $("#messageModal").modal('show');
  503 + }
  504 + else if (result.LoginFailureCauseId != undefined && result.LoginFailureCauseId.toString() == LoginConstants.E_EDITION_NOT_LINKED_WITH_SITE) {
  505 + $rootScope.isVisibleLogin = true;
  506 + $rootScope.errorMessage = LoginMessageConstants.E_EDITION_NOT_LINKED_WITH_SITE;
  507 + $("#messageModal").modal('show');
  508 + }
  509 + else if (result.LoginFailureCauseId != undefined && result.LoginFailureCauseId.toString() == LoginConstants.LICENSE_INACTIVE) {
  510 + $rootScope.isVisibleLogin = true;
  511 + $rootScope.errorMessage = LoginMessageConstants.LICENSE_INACTIVE_MESSAGE;
  512 + $("#messageModal").modal('show');
  513 + }
  514 +
  515 +
  516 + else {
  517 + if (typeof result.FirstName != undefined || result.FirstName != "" || result.FirstName != null) {
  518 + //code for modesty setting
  519 + if (result.LicenseInfo != null) {
  520 + if (result.Modesty) {
  521 + $rootScope.isModestyOn = true;
  522 + $rootScope.isModestyOff = false;
  523 + localStorage.setItem("globalModesty", "Y");
  524 + $rootScope.formsetting = {
  525 + ethnicity: null,
  526 + modesty: "Y"
  527 + }
  528 + $rootScope.UpdateAndCloseSetting($rootScope.formsetting)
  529 + }
  530 + else {
  531 + $rootScope.isModestyOn = false;
  532 + $rootScope.isModestyOff = true;
  533 + localStorage.setItem("globalModesty", "N");
  534 + $rootScope.formsetting = {
  535 + ethnicity: null,
  536 + modesty: "N"
  537 + }
  538 + $rootScope.UpdateAndCloseSetting($rootScope.formsetting)
  539 + }
  540 + }
  541 + else {
  542 + $rootScope.isModestyOn = true;
  543 + $rootScope.isModestyOff = false;
  544 + localStorage.setItem("globalModesty", "Y");
  545 + $rootScope.formsetting = {
  546 + ethnicity: null,
  547 + modesty: "Y"
  548 + }
  549 + $rootScope.UpdateAndCloseSetting($rootScope.formsetting)
  550 + }
  551 + //code for modesty setting
  552 +
  553 +
  554 +
  555 +
  556 + //LicenseId would be zero for admin that is why we set the haveRoleAdmin = true
  557 + if (result.LicenseId == 0) {
  558 + $rootScope.haveRoleAdmin = true;
  559 +
  560 + $rootScope.userData = result;
  561 + $rootScope.userModules = result.Modules;
  562 +
  563 + if ($scope.currentUserDetails == null || $scope.currentUserDetails == undefined || $scope.currentUserDetails == "") {
  564 + localStorage.setItem('loggedInUserDetails', JSON.stringify(result));
  565 + }
  566 +
  567 + if (isCommingSoonModel == true) {
  568 +
  569 + ShowAssignedModulesPopup(result.Modules);
  570 +
  571 + //if (userInfo.rememberChk) {
  572 +
  573 + // $scope.saveRemeberMeDetails(result, userInfo);
  574 + //}
  575 +
  576 + sessionStorage.setItem("loginSession", "true");
  577 + localStorage.setItem('isCommingSoonModel', false);
  578 +
  579 + $rootScope.isVisibleLogin = false;
  580 + }
  581 +
  582 +
  583 + $location.path('/');
  584 +
  585 + }
  586 + else {
  587 + if (result.LicenseInfo != null ) {
  588 + //0.
  589 + $rootScope.userData = result;
  590 + $rootScope.userModules = result.Modules;
  591 +
  592 + //1. set haveRoleAdmin = false because LicenseInfo is not null
  593 + $rootScope.haveRoleAdmin = false;
  594 +
  595 + //2.
  596 + if ($scope.currentUserDetails == null || $scope.currentUserDetails == undefined || $scope.currentUserDetails == "") {
  597 +
  598 + localStorage.setItem('loggedInUserDetails', JSON.stringify(result));
  599 + }
  600 +
  601 + // 3.ShowAssignedModulesPopup
  602 + //isCommingSoonModel =true only when user comes first time on application and login
  603 + //if (isCommingSoonModel == true) {
  604 +
  605 + // ShowAssignedModulesPopup(result.Modules);
  606 + //}
  607 +
  608 + //4.
  609 + //if ($scope.rememberChk) {
  610 +
  611 + // $scope.saveRemeberMeDetails(result, userInfo);
  612 + //}
  613 +
  614 + //5.
  615 + sessionStorage.setItem("loginSession", "true");
  616 + $rootScope.isVisibleLogin = false;
  617 +
  618 + //6. reset the isCommingSoonModel to false in local storage so that upcomming module pop up would not show again to the user after firts time
  619 + // localStorage.setItem('isCommingSoonModel', false);
  620 +
  621 + $location.path('/');
  622 +
  623 + }
  624 + else {
  625 + if ($('#dvTerms').length > 0) {
  626 + $('#dvTerms').html(result.TermsAndConditionsText);
  627 + }
  628 + $rootScope.isVisibleLogin = true;
  629 + $('#dvTermCondition').fadeIn();
  630 + $rootScope.userData = result;
  631 + $rootScope.haveRoleAdmin = false;
  632 + localStorage.setItem('loggedInUserDetails', JSON.stringify(result));
  633 + $location.path('/');
  634 + }
  635 + }
  636 + }
  637 +
  638 +
  639 + }
  640 + }
  641 +
  642 +
  643 +
  644 + },
  645 +
  646 + function (error) {
  647 +
  648 + console.log(' Error in authentication = ' + error.statusText);
  649 + // alert(LoginMessageConstants.ERROR_IN_FECTHING_DETAILS);
  650 + $rootScope.isVisibleLogin = true;
  651 + $rootScope.errorMessage = error;
  652 + $("#messageModal").modal('show');
  653 +
  654 + }
  655 + )
  656 +
  657 + }
  658 + //$rootScope.siteUrlInfo.siteIP = siteInfo[0];
  659 + //$rootScope.siteUrlInfo.remoteIPAddress = siteInfo[1];
  660 + //$rootScope.siteUrlInfo.accountNumber = siteInfo[2];
  661 + //$rootScope.siteUrlInfo.edition = siteInfo[3];
  662 + //$rootScope.siteUrlInfo.urlReferer = siteInfo[4];
  663 +
  664 +
  665 + }
  666 +
384 667 $scope.saveRemeberMeDetails = function (result, userInfo) {
385 668  
386 669 localStorage.setItem('RememberMeLoginId', result.LoginId);
... ... @@ -448,7 +731,7 @@ function ($rootScope, $scope, Modules, $log, $location, $timeout, DataService, A
448 731 $rootScope.isVisibleLogin = false;
449 732 $rootScope.userData = userInfo;
450 733 $rootScope.userModules = userInfo.Modules;
451   - ShowAssignedModulesPopup(userInfo.Modules);;
  734 + // ShowAssignedModulesPopup(userInfo.Modules);;
452 735 }
453 736 }
454 737 }
... ... @@ -499,72 +782,33 @@ function ($rootScope, $scope, Modules, $log, $location, $timeout, DataService, A
499 782  
500 783 isCommingSoonModel = $rootScope.getLocalStorageValue('isCommingSoonModel');
501 784  
502   - try {
503   - var userInfo = JSON.parse($scope.currentUserDetails);
504   -
505   - if (userInfo.LoginId != undefined || userInfo.LoginId != "" || userInfo.LoginId != null) {
506   -
507   - if (userInfo.UserType == UserTypeConstants.SUPER_ADMIN && userInfo.IsActive) {
508   -
509   - //0
510   - $rootScope.userData = userInfo;
511   - $rootScope.userModules = userInfo.Modules;
  785 + try {
  786 + var userInfo = JSON.parse($scope.currentUserDetails);
512 787  
513   - //1.
514   - userInfo["username"] = userInfo.LoginId;
515   - userInfo["password"] = userInfo.Password;
  788 + if (userInfo.LoginId != undefined || userInfo.LoginId != "" || userInfo.LoginId != null) {
516 789  
517   - //2.
518   - $rootScope.AuthenticateUser(userInfo);
  790 + userInfo["username"] = userInfo.LoginId;
  791 + userInfo["password"] = userInfo.Password;
519 792  
520   - $rootScope.haveRoleAdmin = true;
521   -
522   - if ($rootScope.refreshcheck == null) {
523   -
524   - if ($location.path() == "/lab-exercises-detail") {
525   -
526   - $location.url('/');
527   - }
528   - else {
  793 +
  794 + $rootScope.AuthenticateUser(userInfo);
  795 +
  796 + if ($rootScope.refreshcheck == null) {
529 797  
530   - $location.path('/');
531   - }
532   - $rootScope.isVisibleLogin = false;
533   - }
534   -
535   - }
536   -
537   - else
538   - {
539   - $rootScope.haveRoleAdmin = false;
540   -
541   - if (userInfo.LicenseInfo.IsTermAccepted)
542   - {
543   - $rootScope.userData = userInfo;
544   - $rootScope.userModules = userInfo.Modules;
545   - $rootScope.isVisibleLogin = false;
546   -
547   -
548   - if ($rootScope.refreshcheck == null) {
549   - $location.path('/');
550   - }
  798 + if ($location.path() == "/lab-exercises-detail") {
551 799  
  800 + $location.url('/');
552 801 }
553 802 else {
554   - if ($('#dvTerms').length > 0) {
555   - $('#dvTerms').html(userInfo.TermsAndConditionsText);
556   - }
557   - $rootScope.isVisibleLogin = true;
558   - $('#dvTermCondition').fadeIn();
559   - $rootScope.userData = userInfo;
560   - $rootScope.userModules = userInfo.Modules;
561   - //$rootScope.haveRoleAdmin = true;
  803 +
562 804 $location.path('/');
563 805 }
  806 + $rootScope.isVisibleLogin = false;
564 807 }
565 808 }
566   -
567   - }
  809 +
  810 +
  811 + }
568 812 catch (e) {
569 813 localStorage.removeItem('loggedInUserDetails');
570 814 }
... ...
400-SOURCECODE/AIAHTML5.Web/app/controllers/LabExercController.js
... ... @@ -119,7 +119,7 @@ function ($scope, $rootScope, pages, log, $http, $timeout, DataService, $filter,
119 119 }
120 120 )
121 121 }
122   -
  122 + $scope.labExerciseModuleData = [];
123 123 $scope.GetQuizByTopic = function () {
124 124  
125 125 $rootScope.isLoading = true;
... ... @@ -140,7 +140,7 @@ function ($scope, $rootScope, pages, log, $http, $timeout, DataService, $filter,
140 140 var keywords = $location.search();
141 141 $scope.labExercideIdentifier = (keywords.labexercise.replace('.json', '')).split('dat_')[1];
142 142  
143   -
  143 + $scope.labExerciseModuleData = result.LabExercise;
144 144 $.each(result.LabExercise, function (index, value) {
145 145  
146 146 $scope.LabExerciseName = result.LabExercise[index].Topic;
... ... @@ -425,7 +425,13 @@ function ($scope, $rootScope, pages, log, $http, $timeout, DataService, $filter,
425 425  
426 426 $scope.scoreResult = (parseInt($scope.CorrectAnswer) / parseInt($scope.inCorrectAnswer)) * 100;
427 427 $scope.scoreResult = Math.round($scope.scoreResult);
428   -
  428 + $("#resultLabData tr td:nth-child(2)").each(function (key, value) {
  429 + if ($(this).text().length == 1) {
  430 + var a = parseInt($(this).prev().text()) - 1;
  431 + $(this).text($scope.labExerciseModuleData[0].Questions[a].activityTitle);
  432 + $(this).next().text("Not Attempted");
  433 + }
  434 + });
429 435 }
430 436  
431 437  
... ...
400-SOURCECODE/AIAHTML5.Web/app/main/AIA.js
... ... @@ -361,7 +361,9 @@ AIA.constant(&quot;LoginConstants&quot;, {
361 361 "ACCOUNT_NUMBER_NOT_EXIST": "1",
362 362 "EDITION_NOT_EXIST": "3",
363 363 "MASTER_SITEIP_NOT_EXIST": "2",
364   - "LICENSE_INACTIVE": "6"
  364 + "LICENSE_INACTIVE": "6",
  365 + "INVALID_CLIENT": "Clinet is not valid",
  366 + "MSG_NOT_AUTHORIZE_SITE_USER": "User is not authorized.",
365 367 });
366 368  
367 369 AIA.constant("LoginMessageConstants", {
... ... @@ -400,6 +402,9 @@ AIA.constant(&quot;LoginMessageConstants&quot;, {
400 402 "UNABLE_TO_UNBLOCK": "We are unable to unblock. Please try after sometime.",
401 403 //"ERROR_IN_FECTHING_DETAILS": "Error in fecthing details.",
402 404 //"MAIL_NOT_SENT": "Mail not sent."
  405 + "E_ACCOUNT_NUMBER_NOT_NULL": "Account number cannot be null",
  406 + "E_EDITION_ID_NOT_NULL": "Edition Id cannot be zero.",
  407 + "E_EDITION_NOT_LINKED_WITH_SITE": "Your credentials are invalid. Please contact the site administrator of your institution.",
403 408  
404 409 })
405 410 AIA.constant("AdminConstants", {
... ...
400-SOURCECODE/AIAHTML5.Web/app/services/AuthenticationService.js
... ... @@ -22,6 +22,29 @@
22 22 return deferred.promise;
23 23 },
24 24  
  25 + validateClientSite: function (clientInfo) {
  26 + var deferred = $q.defer();
  27 +
  28 + $http.post('/API/api/Client', JSON.stringify(clientInfo), {
  29 + headers: {
  30 + 'Content-Type': 'application/json'
  31 + }
  32 + })
  33 + .success(function (data, status, headers, config) {
  34 + console.log('success')
  35 + deferred.resolve(data);
  36 + }).error(function (data, status, headers, config) {
  37 + console.log('error')
  38 + deferred.reject(data);
  39 + $rootScope.isVisibleLogin = true;
  40 + $rootScope.errorMessage = data;
  41 + $("#messageModal").modal('show');
  42 +
  43 + });
  44 + return deferred.promise;
  45 + },
  46 +
  47 +
25 48 SendMailToUser: function (userInfo, havePassword) {
26 49 var deferred = $q.defer();
27 50  
... ...
400-SOURCECODE/AIAHTML5.Web/app/services/ConfigurationService.js 0 → 100644
  1 +AIA.factory('ConfigurationService', function ($http, $q, $rootScope) {
  2 + return {
  3 + getCofigValue: function () {
  4 + var deferred = $q.defer();
  5 + $http({
  6 + method: 'GET',
  7 + url: 'API/api/Configuration/GetConfigurationvalues'
  8 + }).success(function (data, status, headers, config) {
  9 + console.log('success' + data);
  10 + deferred.resolve(data);
  11 + }).error(function (data, status, headers, config) {
  12 + console.log('error')
  13 + deferred.reject(data);
  14 +
  15 + });
  16 + return deferred.promise;
  17 + }
  18 +
  19 + }
  20 +});
0 21 \ No newline at end of file
... ...
400-SOURCECODE/AIAHTML5.Web/app/views/CBuild/CBuild-view.html
1   -<div class="bodyWrap row ">
  1 +<!--<div class="bodyWrap row ">
2 2 <div ng-include="'app/widget/MainMenu.html'" />
3 3 <div class="main" ng-init="loadCurriculumBuiderData()">
4 4 <div class="col-sm-12">
... ... @@ -37,6 +37,7 @@
37 37 <a type="button" class="btn btn-primary" href="curriculum-builder-detail.html">OK</a>
38 38 </div>
39 39 </div><!-- /.modal-content -->
40   - </div><!-- /.modal-dialog -->
41   - </div><!-- /.modal -->
42   -</div>
  40 + <!--</div><!-- /.modal-dialog -->
  41 + <!--</div><!-- /.modal -->
  42 +<!--</div>-->
  43 +<div ng-init="openAIAFlexCB()"></div>
43 44 \ No newline at end of file
... ...
400-SOURCECODE/AIAHTML5.Web/app/views/LabExerc/lab-exercises-detail.html
... ... @@ -93,7 +93,7 @@
93 93 <div class="panel-heading">
94 94 <div class="row">
95 95 <div class="col-sm-4 text-left"><strong>{{LabExerciseName}}</strong></div>
96   - <div class="col-sm-4 text-center">performance Report</div>
  96 + <div class="col-sm-4 text-center">Performance Report</div>
97 97 <div class="col-sm-4 text-right">Score:{{scoreResult}}% </div>
98 98 </div>
99 99 </div>
... ...
400-SOURCECODE/AIAHTML5.Web/app/widget/MainMenu.html
... ... @@ -26,7 +26,7 @@
26 26 <div class="sidebar pull-left mCustomScrollbar _mCS_1 mCS-autoHide ">
27 27 <!--{{name}}-->
28 28 <ul class="nav nav-sidebar" ng-init="hideScrollbar()">
29   - <li ng-repeat="module in userModules" ng-disabled="module.id==7 || module.id==8 || module.id==13"><a id="{{module.slug}}" href="{{module.slug}}" ng-click="IsVisible();getModuleScrollPosition()" data-ng-bind="module.name" ng-class="HightLightModuleSelection('{{module.slug}}')" ng-disabled="module.id==7 ||module.id==8 || module.id==13"><!--{{module.name}}--></a></li>
  29 + <li ng-repeat="module in userModules" ng-hide="module.id==8 || module.id==13"><a id="{{module.slug}}" href="{{module.slug}}" ng-click="IsVisible();getModuleScrollPosition()" data-ng-bind="module.name" ng-class="HightLightModuleSelection('{{module.slug}}')" ng-hide="module.id==8 || module.id==13"><!--{{module.name}}--></a></li>
30 30 </ul>
31 31 </div>
32 32  
... ...
400-SOURCECODE/AIAHTML5.Web/index.aspx 0 → 100644
  1 +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="index.aspx.cs" Inherits="ADAM.AIA.index" %>
  2 +
  3 +<!DOCTYPE html>
  4 +<html lang="en" ng-cloak ng-app="AIA">
  5 +<head>
  6 + <!--<base href="/AIAHTML5/" />-->
  7 + <!--<base href="/AIA/" />-->
  8 + <base href="/" />
  9 + <meta charset="utf-8">
  10 + <meta http-equiv="X-UA-Compatible" content="IE=edge">
  11 + <!--<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">-->
  12 + <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1.0 maximum-scale=1.0" />
  13 + <title>A.D.A.M. Interactive Anatomy</title>
  14 +
  15 + <link href="themes/default/css/bootstrap/3.3.6/bootstrap.css" rel="stylesheet" />
  16 +
  17 +
  18 +
  19 +
  20 + <link href="themes/default/css/bootstrap/3.3.6/main.css" rel="stylesheet" />
  21 +
  22 + <link href="themes/default/css/bootstrap/3.3.6/secondeffect.css" rel="stylesheet" />
  23 +
  24 + <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">
  25 + <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:400,800,700,600,400italic">
  26 +
  27 + <!--<link rel="styleSheet" href="themes/default/css/uigrid/ui-grid.min.css" />-->
  28 + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
  29 + <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
  30 + <!--[if lt IE 9]>
  31 + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
  32 + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
  33 + <![endif]-->
  34 + <link href="themes/default/css/bootstrap/3.3.6/jquery.mCustomScrollbar.css" rel="stylesheet" />
  35 +
  36 + <link href="themes/default/css/bootstrap/3.3.6/jquery-ui.css" rel="stylesheet" />
  37 +
  38 + <link href="libs/jquery/jquery_plugin/jsPanel/jspanel/jquery.jspanel.css" rel="stylesheet" />
  39 + <link href="libs/video_4_12_11/css/video-js_4_12_11.css" rel="stylesheet" />
  40 + <link href="libs/jquery/jquery_plugin/SpeechBubble/css/bubble.css" rel="stylesheet" />
  41 + <link href="libs/jquery/jquery_plugin/slider-pips/jquery-ui-slider-pips.css" rel="stylesheet" />
  42 + <link href="themes/default/css/bootstrap/3.3.6/jquery.minicolors.css" rel="stylesheet" />
  43 + <link href="content/css/print-main.css" rel="stylesheet" />
  44 +
  45 + <!--Annotation Toolbar: Jcanvas-->
  46 + <style>
  47 + /*.ActiveDefaultColorAnnotation {
  48 + background-color: #000000!important;
  49 + }*/
  50 +
  51 +
  52 + #termList option:hover {
  53 + background-color: #3399FF !important;
  54 + color: #fff !important;
  55 + }
  56 +
  57 +
  58 + .ActiveFormattingButtonClass {
  59 + background-color: #1B92D0 !important;
  60 + }
  61 +
  62 + .Edittext-btn-css {
  63 + background: #4B4B4B;
  64 + padding: 4px;
  65 + cursor: pointer;
  66 + margin-right: 2px;
  67 + }
  68 +
  69 + /*.italic-btn-css {
  70 + background: #4B4B4B;
  71 + padding: 4px;
  72 + cursor: pointer;
  73 + margin-right: 2px;
  74 + }*/
  75 +
  76 + .underline-btn-css {
  77 + background: #4B4B4B;
  78 + padding: 4px;
  79 + cursor: pointer;
  80 + margin-right: 5px;
  81 + }
  82 +
  83 +
  84 +
  85 + .activebtncolor {
  86 + background-color: #1B92D0 !important;
  87 + border-color: #1B92D0 !important;
  88 + color: #ffffff !important;
  89 + }
  90 +
  91 + .btn-black-annotation {
  92 + background-color: #4b4b4b;
  93 + border-color: #3f3f3f;
  94 + color: #ffffff;
  95 + }
  96 +
  97 + /*.btn-black-annotation:hover {
  98 + background-color: #1B92D0 !important;
  99 + border-color: #1B92D0 !important;
  100 + color: #ffffff !important;
  101 + }*/
  102 +
  103 + .custom-tooltip-annotation {
  104 + background-color: #fff;
  105 + border: 0 none;
  106 + color: #000;
  107 + left: -52px;
  108 + opacity: 0.9;
  109 + padding: 3px 0;
  110 + position: absolute;
  111 + text-align: center;
  112 + top: 41px;
  113 + width: 120px;
  114 + display: none;
  115 + z-index: 10000;
  116 + border: 1px solid #000;
  117 + color: #000;
  118 + border-radius: 0;
  119 + }
  120 +
  121 + /*7931*/
  122 + .custom-tooltip-annotation-edit {
  123 + background-color: #fff;
  124 + border: 0 none;
  125 + color: #000;
  126 + left: 80px;
  127 + opacity: 0.9;
  128 + padding: 3px 0;
  129 + position: absolute;
  130 + text-align: center;
  131 + bottom: 50px;
  132 + width: 120px;
  133 + display: none;
  134 + z-index: 10000;
  135 + border: 1px solid #000;
  136 + color: #000;
  137 + border-radius: 0;
  138 + }
  139 +
  140 + .custom-tooltip-annotation-toolbar {
  141 + background-color: #fff;
  142 + border: 0 none;
  143 + color: #000;
  144 + opacity: 0.9;
  145 + padding: 3px 0;
  146 + position: absolute;
  147 + text-align: center;
  148 + display: none;
  149 + z-index: 10000;
  150 + border: 1px solid #000;
  151 + color: #000;
  152 + border-radius: 0;
  153 + }
  154 +
  155 + .restrict-carret-icon {
  156 + font-size: 18px;
  157 + position: relative;
  158 + top: 1px;
  159 + }
  160 +
  161 + #refreshBtn {
  162 + color: #ffffff;
  163 + }
  164 + </style>
  165 +
  166 + <script>
  167 + var params = "<%=urlParams%>";
  168 + var isCalsCredantialForSIte ="<%=isCalsCredantial%>";
  169 + </script>
  170 +
  171 +</head>
  172 +<body ng-controller="HomeController" id="bo" ng-init="initializeAIA()" ng-keydown="CheckRefresh($event)">
  173 + <div ng-hide="isVisibleResetPass">
  174 + <div id="login" ng-show="isVisibleLogin">
  175 +
  176 + <div class="container-fluid loginBg">
  177 + <div class="row">
  178 + <div class="col-xs-12 text-center">
  179 + <a href="index.html" class="loginLogo"><img src="content/images/common/logo-large.png" class="img-responsive" alt=""></a>
  180 + <div class="headerBand row">
  181 + <div class="col-xs-12">
  182 + <h1>A.D.A.M. Interactive Anatomy</h1>
  183 + <p>The most comprehensive online interactive anatomy learning resource</p>
  184 + </div>
  185 + </div>
  186 + </div>
  187 + <!--LOGIN PANEL-->
  188 + <div class="col-xs-12 loginPanel">
  189 + <div class="loginBox clearfix">
  190 + <div class="col-xs-12">
  191 + <!--<strong>Login</strong>-->
  192 + <form>
  193 + <div class="form-group">
  194 + <!--<label for="">User ID</label>-->
  195 + <!--input type="email" class="form-control" placeholder="User ID">
  196 + <span class="help-block text-right small"><a href="#" class="color-white">Forgot User ID?</a></span>-->
  197 +
  198 +
  199 + <div class="input-group">
  200 + <span class="input-group-addon"><i class="fa fa-user"></i></span>
  201 + <input type="text" class="form-control" placeholder="Username" ng-model="userInfo.username">
  202 + </div>
  203 + <span class="help-block text-right small"><a href="#" class="color-white" id="forgotUserIdAnchor" data-toggle="modal" ng-click="forgotUserModalShow()" data-target=".forgot-sm">Forgot User ID?</a></span>
  204 +
  205 +
  206 + </div>
  207 + <div class="form-group">
  208 + <!--<label for="">Password</label>-->
  209 + <!--<input type="password" class="form-control" placeholder="Password">
  210 + <span class="help-block text-right small "><a href="#" class="color-white">Forgot Password?</a></span>-->
  211 + <div class="input-group">
  212 + <span class="input-group-addon"><i class="fa fa-key"></i></span>
  213 + <input type="password" id="UserPassword" class="form-control" placeholder="Password" ng-model="userInfo.password">
  214 + </div>
  215 + <span class="help-block text-right small "><a class="color-white" style="cursor: pointer;" id="forgotPasswordAnchor" data-toggle="modal" ng-click="forgotPwdModalShow();" data-target=".forgot-sm1">Forgot Password?</a></span> <!--#resetpass" href="/app/views/Home/resetPwd.html"-->
  216 + <div class="checkbox">
  217 + <label style="font-size: 85%;color:#fff !important;"><input type="checkbox" ng-model="userInfo.rememberChk" ng-click="RememberMe(this.userInfo.rememberChk)">Remember me</label>
  218 + </div>
  219 + </div>
  220 + <div class="form-group">
  221 + <button class="btn btn-primary pull-right" ng-click="AuthenticateUser(userInfo)">Log In</button>
  222 + </div>
  223 + </form>
  224 + </div>
  225 + </div>
  226 + <div class="loginExBtn">
  227 + <a href="https://store.adameducation.com/" target="_blank" class="btn btn-primary">Subscribe Now</a>
  228 + <a href="http://adameducation.com/aiaonline" target="_blank" class="btn btn-primary pull-right">Learn More</a>
  229 + </div>
  230 + </div>
  231 + </div>
  232 + </div>
  233 +
  234 + <!-- Footer -->
  235 + <footer class="dark">
  236 + <div class="container-fluid text-center">
  237 + <img class="browserIcons" src="content/images/common/chrome-icon.png" />
  238 + <img class="browserIcons" src="content/images/common/ie-icon.png" />
  239 + <img class="browserIcons" src="content/images/common/mozilla-icon.png" />
  240 + <img class="browserIcons" src="content/images/common/safari-icon.png" />
  241 + </div>
  242 + <div class="container-fluid text-center">Copyright &copy; {{current_year}} Ebix Inc. All rights reserved.</div>
  243 + </footer>
  244 + </div>
  245 + <!-- Forgot User ID (Small modal) -->
  246 + <div class="modal fade" id="forgotUserModal" role="dialog" tabindex="-1" aria-labelledby="exampleModalLabel" data-target=".forgot-sm">
  247 + <div class="modal-dialog modal-small" role="document">
  248 + <div class="modal-content">
  249 + <div class="modal-header">
  250 + <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
  251 + <h5 class="modal-title" id="exampleModalLabel">Enter your email id to recover User id</h5>
  252 + </div>
  253 + <div class="modal-body">
  254 + <form id="forgetUSerIdForm">
  255 + <div class="form-group">
  256 + <div class="input-group">
  257 + <span class="input-group-addon"><i class="fa fa-envelope"></i></span>
  258 + <input id="btnEmail" class="form-control" placeholder="Email" type="email" ng-model="userInfo.emailId">
  259 + </div>
  260 + </div>
  261 + </form>
  262 + </div>
  263 + <div class="modal-footer" style="padding-bottom:10px;">
  264 + <button type="button" class="btn btn-primary btn-block" ng-click="SendMailToUser(userInfo, false)">Send Mail</button>
  265 + </div>
  266 + <!--<div style="color: maroon; font-weight: bold; " ng-if="message">{{message}}</div>-->
  267 + </div>
  268 + </div>
  269 + </div>
  270 + <!-- Forgot Password (Small modal) -->
  271 + <div class="modal fade" id="forgotPwdModal" role="dialog" tabindex="-1" aria-labelledby="exampleModalLabel" data-target=".forgot-sm1">
  272 + <div class="modal-dialog modal-small" role="document">
  273 + <div class="modal-content">
  274 + <div class="modal-header">
  275 + <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
  276 + <h5 class="modal-title" id="exampleModalLabel">Enter your email id to unblock/ recover Password</h5>
  277 + </div>
  278 + <div class="modal-body" style="padding: 15px;">
  279 + <form id="forgetPwdForm" class="ng-pristine ng-valid ng-valid-email">
  280 + <div class="form-group">
  281 + <div class="">
  282 + <label class="radio-inline">
  283 + <input name="inlineRadioOptions" id="inlineRadio1" value="unblock" type="radio"> Unblock
  284 + </label>
  285 + <label class="radio-inline">
  286 + <input name="inlineRadioOptions" id="inlineRadio2" value="forgotpwd" type="radio"> Forgot Password
  287 + </label>
  288 + </div>
  289 + </div>
  290 +
  291 +
  292 + <div class="form-group">
  293 + <div class="input-group" style="margin-top: 8px;">
  294 + <span class="input-group-addon"><i class="fa fa-envelope"></i></span>
  295 + <input id="btnEmail2" class="form-control ng-pristine ng-untouched ng-valid ng-valid-email" placeholder="Email" ng-model="userInfo.emailId" type="email">
  296 + </div>
  297 + </div>
  298 + </form>
  299 + </div>
  300 + <div class="modal-footer modal-footer-forgot-password" style="padding-bottom:10px;">
  301 + <button type="button" class="btn btn-primary btn-block" ng-click="SendMailToUser(userInfo, true)">Send Mail</button>
  302 + </div>
  303 + <!--<div style="color: maroon; font-weight: bold; " ng-if="message">{{message}}</div>-->
  304 + </div>
  305 + </div>
  306 + </div>
  307 + <div id="index" ng-hide="isVisibleLogin">
  308 + <div class="container-fluid ">
  309 + <!--Header-->
  310 +
  311 + <nav class="navbar navbar-inverse navbar-fixed-top">
  312 + <div class="container-fluid">
  313 + <!-- Brand and toggle get grouped for better mobile display -->
  314 + <div class="navbar-header">
  315 + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#topFixedNavbar1" aria-expanded="false">
  316 + <span class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span>
  317 + </button>
  318 + <a class="frameLogo navbar-brand"><img src="content/images/logo-main.png" class="img-responsive" alt=""></a>
  319 + </div>
  320 + <div ng-include="'app/widget/TopMenu.html'"></div>
  321 + </div>
  322 + </nav>
  323 + <div class="bodyWrap row container-fluid">
  324 +
  325 + <div id="spinner" class="spinner" ng-show="isLoading" style="visibility:hidden">
  326 + <img id="img-spinner" src="content/images/common/loading.gif" alt="Loading" />
  327 + </div>
  328 + <div ng-view></div>
  329 +
  330 + </div>
  331 + </div>
  332 +
  333 +
  334 +
  335 + <div class="modal fade" id="ShowListManager" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" ng-init="tab = 1" style="width:27%;left:50%;overflow:hidden;height:500px;top:100px">
  336 + <div class="modal-dialog" role="document" style="width:400px;">
  337 + <div class="modal-content" style="width:100%;max-width:400px;">
  338 + <div class="modal-header setting-modal-header" style="padding: 5px 10px; border-bottom: 1px solid #e5e5e5;">
  339 + <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  340 + <h4 class="modal-title" id="myModalLabel">Setting</h4>
  341 + </div>
  342 + <div class="modal-body">
  343 + <div class="row" style="padding-top:20px;">
  344 + <div class="col-sm-12">
  345 +
  346 + <div aria-label="..." role="group" class="btn-group btn-group-justified">
  347 + <div role="group" class="btn-group">
  348 + <button class="btn btn-sm btn-success" type="button" ng-click="tab = 1">Appearance</button>
  349 + </div>
  350 + <div role="group" class="btn-group">
  351 + <button class="btn btn-sm btn-success" type="button" ng-click="tab = 2">Lexicons</button>
  352 + </div>
  353 + <div role="group" class="btn-group">
  354 + <button class="btn btn-sm btn-success" type="button" ng-click="tab = 3">Dissectible</button>
  355 + </div>
  356 + </div>
  357 +
  358 + </div>
  359 +
  360 +
  361 + <div class="col-sm-12" ng-show="tab === 1">
  362 +
  363 +
  364 + <div class="row">
  365 + <div class="center-block col-md-11" style="float: none; background-color:#E2E2E2;height:300px;">
  366 + <div class="row" style="padding-top: 22px;">
  367 + <div class="center-block col-md-10" style="float: none; ">
  368 + <h5><strong>System Font</strong></h5>
  369 +
  370 + <div style="border:2px solid #ACACAC;float:left;padding:15px;background-color:#CCCCCC;">
  371 + <div class="col-md-3" style="padding-left:0px;">
  372 + Sample
  373 + </div>
  374 + <div class="col-md-6" style="padding-right:0px;">
  375 + <input type="text" value="" style="width:85%;">
  376 + </div>
  377 + <div class="col-md-3" style="padding-left:0px;">
  378 + <button class="btn btn-primary" style="margin-bottom:5px;">Change</button>
  379 + <button class="btn btn-primary" style="margin-bottom:5px;">Default</button>
  380 + </div>
  381 +
  382 + </div>
  383 + </div>
  384 + </div>
  385 +
  386 + </div>
  387 + </div>
  388 +
  389 + </div>
  390 + <div class="col-sm-12" ng-show="tab === 2">
  391 +
  392 +
  393 + <div class="row">
  394 + <div class="center-block col-md-11" style="float: none; background-color:#E2E2E2;height:300px;">
  395 + <div class="col-md-6">
  396 + <h6><strong>Primary Lexicon</strong></h6>
  397 + <input type="text" value="English" style="width:90%;">
  398 + <button class="btn btn-primary" style="float:right;margin-bottom:5px;margin-top:5px;">Change</button>
  399 + <h6>Secondry Lexicon</h6>
  400 + <textarea style="width:90%;"></textarea>
  401 + <button>Change</button>
  402 + <button>Change</button>
  403 + </div>
  404 + <div class="col-md-6">
  405 + <h6>Available Lexicon</h6>
  406 + <select multiple class="form-control" id="sel2">
  407 + <option>1</option>
  408 + <option>2</option>
  409 + <option>3</option>
  410 + <option>4</option>
  411 + <option>5</option>
  412 + </select>
  413 +
  414 + <p>Note: Some languages require special system fonts to display correctly</p>
  415 + </div>
  416 +
  417 + </div>
  418 + </div>
  419 +
  420 + </div>
  421 + <div class="col-sm-12" ng-show="tab === 3">
  422 +
  423 + <div class="row">
  424 + <div class="center-block col-md-11" style="float: none; background-color:#E2E2E2;height:300px;">
  425 + <h6>Skin Tones</h6>
  426 + <div class="center-block col-md-8" style="float: none;">
  427 + <div class="col-md-6">
  428 + <img class="img-responsive" alt="" src="http://placehold.it/400x300">
  429 + </div>
  430 + <div class="col-md-6">
  431 + <img class="img-responsive" alt="" src="http://placehold.it/400x300">
  432 + </div>
  433 + <div class="col-md-6">
  434 + <img class="img-responsive" alt="" src="http://placehold.it/400x300">
  435 + </div>
  436 + <div class="col-md-6">
  437 + <img class="img-responsive" alt="" src="http://placehold.it/400x300">
  438 + </div>
  439 +
  440 + </div>
  441 + <h6>Modesty Setting</h6>
  442 + <div class="col-md-6">
  443 + <div class="col-md-4">
  444 + <img class="img-responsive" alt="" src="http://placehold.it/400x300">
  445 + </div>
  446 + <div class="col-md-8">
  447 +
  448 + <div class="radio">
  449 + <label><input type="radio" name="optradio" checked>On</label>
  450 + </div>
  451 + <div class="radio">
  452 + <label><input type="radio" name="optradio">Off</label>
  453 + </div>
  454 +
  455 + </div>
  456 + </div>
  457 + <div class="col-md-6">
  458 + <h6>Annotaion</h6>
  459 + <div class="checkbox">
  460 + <label><input type="checkbox" value="" checked>Erase Annotations when changeing layers</label>
  461 + </div>
  462 + </div>
  463 + </div>
  464 +
  465 + </div>
  466 +
  467 +
  468 +
  469 + </div>
  470 + </div>
  471 + <div class="modal-footer">
  472 + <button type="button" class="btn btn-primary">Ok</button>
  473 + <button type="button" class="btn btn-primary" data-dismiss="modal">Cancle</button>
  474 + <button type="button" class="btn btn-primary">Apply</button>
  475 + </div>
  476 + </div>
  477 + </div>
  478 + </div>
  479 + </div>
  480 +
  481 + <!--Settings modal-->
  482 + <!--<div id="modal-settings" style="z-index: 1000000000; background: white;width: 302px;position:absolute;left:40%;right:0;top:70px;">-->
  483 + <div id="modelsettingsbackground" style="background-color: black; bottom: 0; display: none; height: 100%; left: 0; opacity: 0.5; position: fixed; right: 0; top: 0; width: 100%; z-index: 12000000;"></div>
  484 + <div id="modal-settings" style="display:none;z-index: 1000000000;height:auto;width: 300px;position:absolute;left:40%;right:0;top:70px;">
  485 + <div role="document">
  486 + <form>
  487 + <div ng-init="loadsettings()" class="modal-content" id="setting-modal-dark">
  488 + <div class="modal-header annotation-modal-header">
  489 + <button type="button" class="close" data-dismiss="modal" ng-click="CloseSetting()" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  490 + <h4 class="modal-title" id="myModalLabel2">Settings</h4>
  491 + </div>
  492 + <div class="modal-body">
  493 + <div class="paddTop15">
  494 + <!-- Nav tabs -->
  495 + <ul class="nav nav-tabs" role="tablist">
  496 + <li role="presentation" ng-class="{'active':SettingsTab==1}"><a role="tab" class="padd5" ng-click="SetSettingActiveTab(1)">Appearance</a></li>
  497 + <li role="presentation" ng-class="{'active':SettingsTab==2}"><a role="tab" class="padd5" ng-click="SetSettingActiveTab(2);lexiconData()">Lexicons</a></li>
  498 + <li role="presentation" ng-class="{'active':SettingsTab==3}"><a role="tab" class="padd5" ng-click="SetSettingActiveTab(3)">Dissectible</a></li>
  499 +
  500 + </ul>
  501 + <!-- Tab panes -->
  502 + <div class="tab-content">
  503 + <div role="tabpanel" ng-class="{'tab-pane active' : SettingsTab === 1,'tab-pane' : SettingsTab !==1 }" id="appearance">
  504 + <div class="row">
  505 + <div class="col-sm-12">
  506 + <div class="well well-sm no-margin-btm">
  507 + <h5>System Font</h5>
  508 + <div class="form-group">
  509 + <label for="SystemFont" class="font13">Sample</label>
  510 + <input type="text" class="form-control" id="SystemFont" value="AaBbYyZz" disabled>
  511 + </div>
  512 + <button class="btn btn-success btn-sm" data-toggle="modal" data-target="#modal-change">Change</button>
  513 + <button class="btn btn-success btn-sm">Default</button>
  514 + </div>
  515 + </div>
  516 + </div>
  517 + </div>
  518 + <div role="tabpanel" ng-class="{'tab-pane active' : SettingsTab === 2,'tab-pane' : SettingsTab !==2 }" id="lexicons">
  519 + <div class="row paddingTopBtm10">
  520 + <div class="col-sm-6">
  521 + <div class="form-group">
  522 + <label for="SystemFont" class="font13">Primary Lexicon</label>
  523 + <input type="text" id="primarylaxican" class="form-control" value="English" name="1" disabled>
  524 + <button class="btn btn-sm btn-success btn-block marginTop5" id="laxicanlanguageChagne" disabled>Change</button>
  525 + </div>
  526 +
  527 + <div class="form-group">
  528 + <label for="SystemFont" class="font13">Secondary Lexicons</label>
  529 + <!--<textarea class="form-control" rows="3">-->
  530 + <select class="form-control" size="5" id="secondLax"></select>
  531 + <!--</textarea>-->
  532 + </div>
  533 + <div class="form-group">
  534 + <button class="btn btn-sm btn-success" id="laxiconLangAdd" disabled>Add</button>
  535 + <button class="btn btn-sm btn-success" id="laxiconLangRemove">Remove</button>
  536 + </div>
  537 + </div>
  538 + <div class="col-sm-6" style="padding-left:13px;padding-right:13px;">
  539 + <div class=" form-group">
  540 + <label for="SystemFont" class="font13">Available Lexicons</label>
  541 + <select class="form-control" size="8" id="lexiconLangDropdown"></select>
  542 + </div>
  543 + <p class="font11"><strong>Note :</strong> Some languages require special system fonts to display correctly</p>
  544 + </div>
  545 + <div class="clearfix"></div>
  546 + </div>
  547 + </div>
  548 + <div role="tabpanel" id="dissectible" ng-class="{'tab-pane active' : SettingsTab === 3,'tab-pane' : SettingsTab !==3 }">
  549 + <div class="">
  550 + <div class="col-sm-12">
  551 + <h5 class="bolder font13 no-margin-top">Skin Tones</h5>
  552 + <div class="skin-tones">
  553 + <div align="center">
  554 + <div class="col-sm-5">
  555 + <button id="btnEthnicW" class="thumbnail skinmarginbtm6" ng-model="formsetting.ethnicity" ng-click="ChangeEthnicity(formsetting,'W')">
  556 + <img src="~/../content/images/common/skin1.jpg" alt="">
  557 + </button>
  558 + </div>
  559 + <div class="col-sm-5">
  560 + <button id="btnEthnicB" class="thumbnail skinmarginbtm6" ng-model="formsetting.ethnicity" ng-click="ChangeEthnicity(formsetting,'B')">
  561 + <img src="~/../content/images/common/skin2.jpg" alt="">
  562 + </button>
  563 + </div>
  564 + <div class="col-sm-5">
  565 + <button id="btnEthnicL" class="thumbnail skinmarginbtm6" ng-model="formsetting.ethnicity" ng-click="ChangeEthnicity(formsetting,'A')">
  566 + <img src="~/../content/images/common/skin3.jpg" alt="">
  567 + </button>
  568 + </div>
  569 + <div class="col-sm-5">
  570 + <button id="btnEthnicA" class="thumbnail skinmarginbtm6" ng-model="formsetting.ethnicity" ng-click="ChangeEthnicity(formsetting,'L')">
  571 + <img src="~/../content/images/common/skin4.jpg" alt="">
  572 + </button>
  573 + </div>
  574 + </div>
  575 + </div>
  576 +
  577 + </div>
  578 + </div>
  579 + <div class="">
  580 + <div class="col-sm-6">
  581 + <h5 class="font13 bolder">Modesty Settings</h5>
  582 + <img src="~/../content/images/common/adam-leaf.png" alt="" class="pull-left marginR5">
  583 + <div class="radio">
  584 + <label>
  585 + <input type="radio" ng-checked="isModestyOn" ng-model="formsetting.modesty" value="Y" name="modestyRadios" id="modon" ng-click="ChangeModesty(formsetting,'Y')">
  586 + <span class="">On</span>
  587 + </label>
  588 + </div>
  589 + <div class="radio">
  590 + <label>
  591 + <input type="radio" ng-checked="isModestyOff" ng-model="formsetting.modesty" value="N" name="modestyRadios" id="modoff" ng-click="ChangeModesty(formsetting,'N')">
  592 + <span class="">Off</span>
  593 + </label>
  594 + </div>
  595 + </div>
  596 + <div class="col-sm-6">
  597 + <h5 class="font13 bolder">Annotation</h5>
  598 + <div class="checkbox no-margin">
  599 + <!--Settings > The entire highlighted part should be active-->
  600 + <label class="font11 no-margin-btm">
  601 + <input type="checkbox" value="" checked>
  602 + Erase Annotations when changing layers
  603 + </label>
  604 + </div>
  605 + </div>
  606 + </div>
  607 + </div>
  608 + </div>
  609 + </div>
  610 + </div>
  611 + <div class="modal-footer">
  612 + <button type="button" class="btn btn-primary" ng-click="UpdateAndCloseSetting(formsetting)">OK</button>
  613 +
  614 + <!--<button type="button" class="btn btn-primary" data-dismiss="modal">Cancel</button>-->
  615 + <button type="button" class="btn btn-primary" ng-click="CloseSetting()">Cancel</button>
  616 + <button type="button" class="btn btn-primary" ng-click="UpdateSetting(formsetting)">Apply</button>
  617 + </div>
  618 + </div>
  619 + </form>
  620 + </div>
  621 + </div>
  622 + <div id="setting-spinner" style="display:none;position: fixed; top: 50%; left: 50%; margin-left: -50px; z-index: 15000; overflow: auto; width: 100px;">
  623 + <img id="img-spinner" src="content/images/common/loading.gif" alt="Loading">
  624 + </div>
  625 + <!--Annotation Modal-->
  626 + <div class="annotationTollbar" style="width: 300px;position: fixed; top: 80px; right: 20px; display: none; z-index: 1200000;">
  627 + <div class="annotationbar">
  628 + <div class="modal-content">
  629 + <div class="modal-header annotation-modal-header">
  630 + <button type="button" class="close" aria-label="Close" ng-click="CloseAnnotationTool()"><span aria-hidden="true">&times;</span></button>
  631 + <h4 class="modal-title" id="myModalLabel">Annotation</h4>
  632 + </div>
  633 + <div class="modal-body" id="AnnotaionPopupDiv">
  634 + <div class="row">
  635 + <div class="col-sm-12">
  636 + <h5>Mode</h5>
  637 +
  638 + <div class="btn-group btn-group-justified" role="group" aria-label="...">
  639 + <div class="btn-group" role="group" tooltip>
  640 + <div id="identify-block" style="display: none; font-size:13px;">Identify Mode</div>
  641 + <button id="OnIdentify" type="button" class="btn btn-sm btn-success" ng-click="OnIdentifyClick()">Identify</button>
  642 + </div>
  643 + <div class="btn-group" role="group">
  644 + <div id="draw-block" style="display: none; font-size: 13px;">Draw Mode</div>
  645 + <button id="DrawMode" type="button" ng-click="DrawingMode()" class="btn btn-sm btn-success">Draw</button>
  646 + </div>
  647 + </div>
  648 +
  649 + </div>
  650 + <div class="col-sm-12">
  651 + <h5>Tools</h5>
  652 + <div class="well well-popup">
  653 + <div class="" aria-label="...">
  654 + <div class="" role="group" align="center">
  655 + <div id="cursor-block" style="display: none; font-size:13px;"></div>
  656 + <button type="button" class="btn btn-black-annotation btn-xs mrgnBtm5 btnCursor" ng-mouseover="addToolTip(75, 60, 120, 'Select Cursor(s)')" ng-mouseleave="removeToolTipOnMouseOut()" ng-click="Cursor()"><img src="content/images/icon-identity.png" alt="" title=""></button>
  657 + <button type="button" class="btn btn-black-annotation btn-xs mrgnBtm5 btn-annotation btn-annotation-pin" ng-mouseover="addToolTip(75, 100, 120, 'Draw Pin')" ng-mouseleave="removeToolTipOnMouseOut()" ng-click="DrawPin($event)"><img src="content/images/draw-pin.png" alt="" title=""></button>
  658 + <button type="button" class="btn btn-black-annotation btn-xs mrgnBtm5 btn-annotation btn-annotation-arrow" ng-mouseover="addToolTip(75, 120, 120, 'Draw Arrow')" ng-mouseleave="removeToolTipOnMouseOut()" ng-click="DrawArrow($event)"><img src="content/images/draw-arrow.png" alt="" title=""></button>
  659 + <button type="button" class="btn btn-black-annotation btn-xs mrgnBtm5 btn-annotation btn-annotation-Text" ng-mouseover="addToolTip(75, 140, 120, 'Draw Text')" ng-mouseleave="removeToolTipOnMouseOut()" ng-click="DrawText($event)"><img src="content/images/draw-text.png" alt="" title=""></button>
  660 + </div>
  661 + <div class="" role="group" align="center">
  662 + <button type="button" class="btn btn-black-annotation btn-xs btn-annotation btn-annotation-line" ng-mouseover="addToolTip(95, 60, 120, 'Draw Line')" ng-mouseleave="removeToolTipOnMouseOut()" ng-click="DrawLine($event)"><img src="content/images/draw-line.png" alt="" title=""></button>
  663 + <button type="button" class="btn btn-black-annotation btn-xs btn-annotation btn-annotation-rectangle" ng-mouseover="addToolTip(95, 100, 120, 'Draw Rectangle')" ng-mouseleave="removeToolTipOnMouseOut()" ng-click="DrawRectangle($event)"><img src="content/images/draw-rec.png" alt="" title=""></button>
  664 + <button type="button" class="btn btn-black-annotation btn-xs btn-annotation btn-annotation-circle" ng-mouseover="addToolTip(95, 120, 120, 'Draw Circle')" ng-mouseleave="removeToolTipOnMouseOut()" ng-click="DrawCircle($event)"><img src="content/images/draw-cir.png" alt="" title=""></button>
  665 + <!--<button type="button" class="btn btn-black-annotation btn-xs btn-annotation" ng-mouseover="addToolTip(95, 140, 120, 'Draw Polygon')" ng-mouseleave="removeToolTipOnMouseOut()" ng-click="DrawPolygon($event)"><img src="content/images/draw-poly.png" alt="" title=""></button>-->
  666 + <button type="button" class="btn btn-black-annotation" id="resetBtn" style="padding:1px 7px;display:none;" ng-click="resetDrawing()" ng-mouseover="addToolTip(95, 140, 120, 'Reset')" ng-mouseleave="removeToolTipOnMouseOut()"><i class="fa fa-refresh"></i></button>
  667 + </div>
  668 + </div>
  669 + </div>
  670 + <div class="well-popup well blankshapediv" ng-mouseover="addToolTip(200, 170, 120, 'Edit Style')" ng-mouseleave="removeToolTipOnMouseOut()">
  671 + <!--#7931-->
  672 +
  673 + <div id="edit-block" style="display: none; font-size: 13px;">Edit Shape Style</div>
  674 + <div id="previewBorder" class="outlinediv" ng-mouseover="addToolTip(170, 170, 120, 'Edit Style')" ng-mouseleave="removeToolTipOnMouseOut()">
  675 + <div id="shapeStyleDiv" style="background-color: #ffffff;" class="fullcolordiv" ng-click="disableAnnotationtoolOnListManager||enableAnnotationToolBar()">
  676 +
  677 + </div>
  678 +
  679 + </div>
  680 + </div>
  681 + <div class="well well-popup">
  682 + <div class="" role="group" aria-label="...">
  683 + <div>
  684 + <a href="#canvasPaint" data-tool="marker" data-size="1" data-color="#fff" id="annotationpaintbrushsize" ng-mouseover="addToolTip(270, 50, 120, 'Paint')" ng-mouseleave="removeToolTipOnMouseOut()" class="btn btn-black-annotation btn-xs pull-left btn-annotation btn-annotation-brush" role="button" data-placement="top" style="margin-right:1%;" ng-click="paintBrush()"><i class="fa fa-paint-brush"></i></a>
  685 + <a href="#canvasPaint" data-tool="eraser" class="btn btn-black-annotation btn-xs pull-left btn-annotation btn-annotation-erase" data-placement="top" data-size=" 1" id="annotationpainteraser" ng-click="EraseDrawing()" ng-mouseover="addToolTip(270, 70, 120, 'Erase')" ng-mouseleave="removeToolTipOnMouseOut()" role="button"><i class=" fa fa-eraser"></i></a>
  686 +
  687 + <!--<button type="button" id="annotationpainteraser" class="btn btn-black-annotation btn-xs pull-left btn-annotation btn-annotation-erase" data-placement="top" ng-click="EraseDrawing()" ng-mouseover="addToolTip(270, 70, 120, 'Erase')" ng-mouseleave="removeToolTipOnMouseOut()"><i class="fa fa-eraser"></i></button>-->&nbsp;
  688 + <div style="width: 80px; margin: 0px 0px 0px 4px; display: inline-block;float:left;">
  689 + <div style="width: 58px; float: left;" ng-mouseover="addToolTip(270, 100, 120, 'Brush Size')" ng-mouseleave="removeToolTipOnMouseOut()">
  690 + <input type="text" id="btnBrushSize" class="form-control" value="1" style="height:32px;border-radius:0;" oninput="Brushsize(this)">
  691 + </div>
  692 + <div style="width: 22px; float: left;">
  693 + <div style="width: 100%; float: left; height: 16px;">
  694 + <button type="button" id="btnBrushSizeIncrement" ng-mouseover="addToolTip(270, 100, 120, 'Brush Size')" ng-mouseleave="removeToolTipOnMouseOut()" class="btn btn-default" style="padding:0 5px;border-radius:0;font-size: 10px;vertical-align:top;">
  695 +
  696 + <img style="width:10px;height:10px;" src="~/../content/images/DA/angle-up.png">
  697 + </button>
  698 + </div>
  699 + <div style="width: 100%; float: left; height: 16px;">
  700 + <button type="button" id="btnBrushSizeDecrease" ng-mouseover="addToolTip(270, 100, 120, 'Brush Size')" ng-mouseleave="removeToolTipOnMouseOut()" class="btn btn-default" style="padding:0 5px;border-radius:0;font-size: 10px;vertical-align:top;">
  701 + <img style="width:10px;height:10px;" src="~/../content/images/DA/angle-down.png">
  702 + </button>
  703 + </div>
  704 + </div>
  705 +
  706 + </div>
  707 +
  708 +
  709 + <div class="pull-left pl-12" style="width:45%; margin-left:2%;margin-top:5px;">
  710 + <div id="slider-range-min-2" ng-mouseover="addToolTip(270, 170, 120, 'Brush Size')" ng-mouseleave="removeToolTipOnMouseOut()"></div>
  711 + </div>
  712 + <div class="clearfix"></div>
  713 + </div>
  714 +
  715 + </div>
  716 +
  717 +
  718 + </div>
  719 +
  720 + </div>
  721 + </div>
  722 + </div>
  723 +
  724 + </div>
  725 + </div>
  726 + </div>
  727 +
  728 + <!--Modal For Annotation Text Box-->
  729 + <div id="annotationTextModal" style="display:none;z-index: 1000000000;width:500px;height:241px;padding-right:0!important;position:fixed;left:0;right:0;top:0px;bottom:0;margin:auto;">
  730 +
  731 + <div class="modal-content">
  732 + <div class="modal-header" style="background-color: #808D43;padding:10px;border-bottom:0;">
  733 + <!--<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>-->
  734 + <h4 class="modal-title" id="myModalLabel" style="font-weight:bold;">Enter Text to be put in a box</h4>
  735 + </div>
  736 + <div class="modal-body">
  737 + <div class="col-xs-12" style="padding:20px 0;">
  738 + <div class="form-inline">
  739 + <!--Annotation: Text in different font style is same.-->
  740 + <select class="form-control" id="selected-font-family"></select>
  741 + <select class="form-control" id="selected-font-size">
  742 + <option>14</option>
  743 + <option>16</option>
  744 + <option>18</option>
  745 + <option>20</option>
  746 + <option>22</option>
  747 + <option>24</option>
  748 + <option>26</option>
  749 + <option>28</option>
  750 + <option>36</option>
  751 + <option>48</option>
  752 + <option>72</option>
  753 + </select>
  754 + <span style="vertical-align:middle;">
  755 + <span id="text-bold" class="Edittext-btn-css">
  756 + <i aria-hidden="true" class="fa fa-bold" style="color: #fff"></i>
  757 + </span>
  758 + <span id="text-italic" class="Edittext-btn-css">
  759 + <i class="fa fa-italic" aria-hidden="true" style="color: #fff"></i>
  760 +
  761 + </span>
  762 + <span id="text-underline" class="underline-btn-css">
  763 + <i class="fa fa-underline" aria-hidden="true" style="color: #fff"></i>
  764 + </span>
  765 + </span>
  766 +
  767 + <div class="form-group" id="font-color" style="display:inline-flex;vertical-align:top;cursor:pointer;margin-right:36px;">
  768 +
  769 + <input type="text" id="saturation-demo" class="form-control demo" data-control="saturation" style="display:none;" value="#0088cc">
  770 + </div>
  771 + <div class="form-group" id="drawTextBGColorpicker" style="display:inline-flex;vertical-align:top;cursor:pointer;margin-right:36px;">
  772 + <input type="text" id="saturation-demo-background" class="form-control drawTextBG" data-control="saturation" style="display:none;" value="#0088cc">
  773 + </div>
  774 +
  775 + <span style="vertical-align:middle;">
  776 + <span id="text-left" class="Edittext-btn-css">
  777 + <i aria-hidden="true" class="fa fa-align-left" style="color: #fff"></i>
  778 + </span>
  779 + <span id="text-center" class="Edittext-btn-css">
  780 + <i class="fa fa-align-center" aria-hidden="true" style="color: #fff"></i>
  781 +
  782 +
  783 + </span>
  784 + <span id="text-right" class="underline-btn-css">
  785 + <i class="fa fa-align-right" aria-hidden="true" style="color: #fff"></i>
  786 +
  787 +
  788 + </span>
  789 + </span>
  790 +
  791 +
  792 + </div>
  793 + </div>
  794 + <textarea class="form-control" id="text_area" rows="3" style="font-family: 'Verdana, sans-serif';font-size:14px; font-weight: normal; font-style: normal; color: #000; text-align: left; text-decoration: none;"></textarea>
  795 +
  796 + <!--code for horizonatl text going out-->
  797 + <div id="atTextDiv" style="float:left;">
  798 + <span id="duptextspan" style="float: left; display: none;"></span>
  799 + <span id="textspan" style="display:none;"></span>
  800 + </div>
  801 + <!--code for horizonatl text going out-->
  802 +
  803 + </div>
  804 + <div class="modal-footer">
  805 + <!--<button type="button" class="btn btn-default" ng-click="closeModal()" data-dismiss="modal">Close</button>-->
  806 + <button type="button" class="btn btn-default" ng-click="closeModal()" id="closeEditText" data-dismiss="modal">Close</button>
  807 + <button type="button" id="saveBtn" class="btn btn-primary" data-dismiss="modal" ng-click="saveText()">Save</button>
  808 + </div>
  809 + </div>
  810 +
  811 + </div>
  812 +
  813 +
  814 +
  815 +
  816 + <!--List manager-->
  817 + <!--List manager-->
  818 + <style>
  819 + #listManager {
  820 + background: #fff;
  821 + border-radius: 3px;
  822 + border: 1px solid #ededed;
  823 + -webkit-box-shadow: 0px 0px 2px 1px rgba(173,173,173,1);
  824 + -moz-box-shadow: 0px 0px 2px 1px rgba(173,173,173,1);
  825 + box-shadow: 0px 0px 2px 1px rgba(173,173,173,1);
  826 + width: 350px;
  827 + position: absolute;
  828 + top: 170px;
  829 + left: 140px;
  830 + display: none;
  831 + z-index: 780000;
  832 + height: auto !important;
  833 + }
  834 +
  835 + #listManager .annotation-modal-header {
  836 + background: #818f44;
  837 + padding: 2px 10px;
  838 + }
  839 +
  840 + #listManager .annotation-modal-header h4 {
  841 + color: #fff;
  842 + font-size: 15px;
  843 + line-height: 20px;
  844 + }
  845 +
  846 + #listManager .modal-header .close {
  847 + color: #fff;
  848 + margin: 0;
  849 + opacity: 10;
  850 + text-shadow: none;
  851 + }
  852 +
  853 + #listManager .modal-footer {
  854 + padding: 5px 10px;
  855 + }
  856 + </style>
  857 + <div id="listManager" style="">
  858 + <div class="modal-header annotation-modal-header">
  859 + <button type="button" class="close" aria-label="Close" ng-click="CloseListManager()"><span aria-hidden="true">&times;</span></button>
  860 + <h4 class="modal-title" id="myModalLabel">List Manager</h4>
  861 + </div>
  862 + <div class="modal-body">
  863 + <div class="row paddingTopBtm10">
  864 + <div class="col-sm-12" ng-init="FillListManager()">
  865 +
  866 + <div class="form-group">
  867 + <label for="sel1">Window</label>
  868 + <select class="form-control" id="viewName" disabled>
  869 + <!--<option>Male Lateral</option>-->
  870 +
  871 + </select>
  872 + </div>
  873 + <div style="">
  874 + <div class="form-group">
  875 + <div ng-click="restrictBodySystemList()" class="btn btn-success btn-block" style="padding:3px 12px;">
  876 + <i class=" fa fa-caret-right restrict-carret-icon"></i> <span>Restrict List to</span>
  877 + </div>
  878 + </div>
  879 +
  880 + <div id="restrictListDiv" style="display:none;">
  881 + <div class="well well-sm marginTopBtm10">
  882 + <div class="form-horizontal">
  883 + <div class="form-group">
  884 + <label class="col-sm-4 control-label" for="System">System</label>
  885 + <div class="col-sm-8">
  886 + <select id="bodySystems" class="form-control" onchange="if (typeof (this.selectedIndex) != 'undefined') refreshTermListOnSystem(this.options[this.selectedIndex].id)"></select>
  887 + <select id="AABodySystems" class="form-control" onchange="if (typeof (this.selectedIndex) != 'undefined') refreshTermListOnSystemSel(this.options[this.selectedIndex].id)" style="display:none;"></select>
  888 + </div>
  889 + </div>
  890 + <div class="form-group">
  891 + <label class="col-sm-4 control-label" for="inputPassword3">Area</label>
  892 + <div class="col-sm-8">
  893 + <select class="form-control" disabled>
  894 + <option value="1" selected="">Entire View</option>
  895 + </select>
  896 + </div>
  897 + </div>
  898 + </div>
  899 + </div>
  900 +
  901 +
  902 + </div>
  903 +
  904 + <!--DA > List Manager > Multiple structure selection should not be available.-->
  905 + <div class="form-group">
  906 + <select id="termList" class="form-control" size="10" onclick="if (typeof (this.selectedIndex) != 'undefined') onListManagerTermSelection(this.options[this.selectedIndex].id, true)"></select>
  907 + </div>
  908 +
  909 + </div>
  910 + <div style="clear:both;"></div>
  911 +
  912 +
  913 +
  914 +
  915 + </div>
  916 + </div>
  917 +
  918 + </div>
  919 + <div class="modal-footer" id="totalTerms">
  920 + <!--<span class="pull-left marginTop5">424 Structures</span>-->
  921 + <!--<button data-dismiss="modal" class="btn btn-primary" type="button"><i class="fa fa-arrow-circle-right"></i></button>-->
  922 + </div>
  923 + </div>
  924 +
  925 + <!--background disable div-->
  926 +
  927 + <div id="modelbackground"></div>
  928 +
  929 +
  930 + <!--Edit Shape Modal-->
  931 +
  932 +
  933 + <div class="modeleditstyle" id="modeleditstyle" style="z-index: 1000000000; background: white;width: 302px;position:absolute;left:40%;right:0;top:70px;">
  934 + <div class="modal-content">
  935 + <div class="modal-header annotation-modal-header">
  936 + <h4 class="modal-title" id="myModalLabel33">Edit Shape Style</h4>
  937 + </div>
  938 + <form id="editStyleForm">
  939 + <div class="modal-body">
  940 + <div class="marginTopBtm10">
  941 + <div class="well well-sm no-margin-btm">
  942 + <div class="row">
  943 + <div class="col-sm-12">
  944 + <div class="checkbox no-margin">
  945 + <label>
  946 + <input id="fill-option" type="checkbox" checked onclick="enableDisableFillOption()"> Fill Option
  947 + </label>
  948 + </div>
  949 + </div>
  950 + <div class="col-sm-6 enableDisableOpacity">
  951 + <!--<div class="radio">
  952 + <label>
  953 + <input type="radio" name="filloption" id="filloption1" value="filloption1">
  954 + <span class="">Texture</span>
  955 + <img id="editstyleTexture" src="~/../content/images/common/annotation-tool-bar/pattern-picker.png" alt="" class="pattern-picker" data-toggle="modal" data-target="#pattern">
  956 + </label>
  957 + </div>-->
  958 + <div class="radio">
  959 + <label>
  960 + <input type="radio" name="filloption" id="filloption2" value="filloption2" checked style="margin-top:8px;">
  961 +
  962 +
  963 + <div id="editstylebackgroundcolor" class="form-group" style="display:inline-flex;vertical-align:top;cursor:pointer;margin-right:36px;float:left;">
  964 + <span style="font-weight: normal; float: left; padding-top: 5px; padding-right: 5px;">Color</span>
  965 + <input type="text" class="form-control outerBackgroundColor" data-control="saturation" style="display:none;" value="#0088cc">
  966 + </div>
  967 +
  968 +
  969 + </label>
  970 + </div>
  971 + </div>
  972 + <div class="col-sm-6 no-padding marginTop10 enableDisableOpacity">
  973 + <div class="row">
  974 + <label class="pull-left" style="font-weight:normal;">Scale</label>
  975 + <div id="edit-slider-3" class="pull-left pl-12" style="width:62%; margin-left:3%; margin-top:2%;">
  976 + <div id="slider-range-min-3"></div>
  977 + </div>
  978 + </div>
  979 +
  980 + <div class="row">
  981 + <label class="pull-left" style="font-weight:normal;">Opacity</label>
  982 + <div id="edit-slider-4" class="pull-left pl-12" style="width:53%; margin-left:3%; margin-top:2%;">
  983 + <div id="slider-range-min-4"></div>
  984 + </div>
  985 + </div>
  986 +
  987 + <div class="clearfix"></div>
  988 +
  989 +
  990 + </div>
  991 + </div>
  992 +
  993 + </div>
  994 + </div>
  995 + <div class="marginTopBtm10">
  996 + <div class="well well-sm no-margin-btm">
  997 + <div class="row">
  998 + <div class="col-sm-12">
  999 + <div class="checkbox no-margin">
  1000 + <label>
  1001 + <input id="Outline-Option" onclick="enableDisableOutline()" type="checkbox" checked> Outline Option
  1002 + </label>
  1003 + </div>
  1004 + </div>
  1005 + <div class="col-sm-6 setEnableDisableForEditShapeStyle">
  1006 + <label class="marginTop5">
  1007 + <span style="font-weight: normal; float: left; padding-top: 5px; padding-right: 5px;">Color</span>
  1008 + <div class="form-group" id="outlineColor" style="display:inline-flex;vertical-align:top;cursor:pointer;margin-right:36px;float:left;">
  1009 +
  1010 + <input type="text" class="form-control borderColorCanvasPreview" data-control="saturation" style="display:none;" value="#0088cc">
  1011 + </div>
  1012 +
  1013 +
  1014 + </label>
  1015 + </div>
  1016 +
  1017 + <div class="col-sm-6 setEnableDisableForEditShapeStyle">
  1018 + <div class="form-horizontal">
  1019 + <div class="form-group">
  1020 + <label class="col-sm-3 control-label" style=" font-weight:normal; padding-top:9px;">Size</label>
  1021 + <div class="col-sm-9 marginTop5">
  1022 + <select id="borderWidthCanvasElement" class="form-control input-sm">
  1023 + <option value="1">1</option>
  1024 + <option value="2">2</option>
  1025 + <option value="3">3</option>
  1026 + <option value="4">4</option>
  1027 + <option value="5">5</option>
  1028 + </select>
  1029 + </div>
  1030 + </div>
  1031 + </div>
  1032 + </div>
  1033 +
  1034 + </div>
  1035 + </div>
  1036 + </div>
  1037 +
  1038 + <div class="marginTopBtm10">
  1039 +
  1040 + <div class="well well-sm no-margin-btm blankshapediv">
  1041 + <div class="outlinediv" id="outlinedivId" style="border: 1px solid #000000;">
  1042 + <div id="imgOpacity" style="background-color: #ffffff" class="fullcolordiv imgopacity">
  1043 + </div>
  1044 + </div>
  1045 + </div>
  1046 +
  1047 + </div>
  1048 + </div>
  1049 + <div class="modal-footer">
  1050 + <button id="btnShapeStyle" type="button" class="btn btn-primary btn-sm" ng-click="setPropertiesForShapes('imgOpacity')">
  1051 + OK
  1052 + </button>
  1053 + <button type="button" class="btn btn-primary btn-sm" data-dismiss="modal" ng-click="disableAnnotationToolBar()">Cancel</button>
  1054 + </div>
  1055 + </form>
  1056 + </div>
  1057 + </div>
  1058 +
  1059 + <!--Export Image Modal-->
  1060 + <div class="modal fade export-image ui-draggable in" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"
  1061 + style="z-index: 1200002;">
  1062 + <div class="modal-dialog modal-sm" role="document">
  1063 + <div class="modal-content">
  1064 + <div class="modal-header annotation-modal-header ui-draggable-handle">
  1065 + <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
  1066 + <h4 class="modal-title" id="">Save As</h4>
  1067 + </div>
  1068 + <div class="modal-body">
  1069 + <div class="row paddTopbtm15">
  1070 + <div class="col-sm-12">
  1071 + <div class="form-group">
  1072 + <label for="filename">Filename:</label>
  1073 + <div class="input-group">
  1074 + <input type="text" class="form-control" id="filename" placeholder="" ng-model="filename">
  1075 + <div class="input-group-addon">.jpg</div>
  1076 + </div>
  1077 + </div>
  1078 + </div>
  1079 + </div>
  1080 +
  1081 + </div>
  1082 + <div class="modal-footer">
  1083 + <div class="row">
  1084 + <input type="file" id="file1" style="display:none">
  1085 + <!--<a href="data:application/xml;charset=utf-8,your code here" download="filename.html">Save</a-->
  1086 + <div class="col-sm-12"><button id="btnSaveEI" class="btn btn-primary" data-dismiss="modal" type="button">Ok</button></div> <!--onclick="makeScreenshot();"--><!--ng-click="dialogs.saveAs()"--><!--ng-click="ShowAlert()"-->
  1087 + </div>
  1088 + </div>
  1089 +
  1090 + </div>
  1091 + </div>
  1092 + </div>
  1093 + <div class="modal fade export-image-ipad ui-draggable in" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"
  1094 + style="z-index: 1200002;">
  1095 + <div class="modal-dialog modal-sm" role="document">
  1096 + <div class="modal-content">
  1097 + <div class="modal-header annotation-modal-header ui-draggable-handle">
  1098 + <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
  1099 + <h4 class="modal-title" id="">Download Export Image</h4>
  1100 + </div>
  1101 + <div class="modal-body">
  1102 + <div class="row paddTopbtm15">
  1103 + <div class="col-sm-12">
  1104 + <div class="form-group">
  1105 + <label for="filename">Exported image open in next Teb. Please download it</label>
  1106 +
  1107 + </div>
  1108 + </div>
  1109 + </div>
  1110 +
  1111 + </div>
  1112 + <div class="modal-footer">
  1113 + <div class="row">
  1114 + <input type="file" id="file1" style="display:none">
  1115 + <!--<a href="data:application/xml;charset=utf-8,your code here" download="filename.html">Save</a-->
  1116 + <div class="col-sm-12"><button id="btnPrintPreview" class="btn btn-primary" data-dismiss="modal" type="button">Ok</button></div> <!--onclick="makeScreenshot();"--><!--ng-click="dialogs.saveAs()"--><!--ng-click="ShowAlert()"-->
  1117 + </div>
  1118 + </div>
  1119 +
  1120 + </div>
  1121 + </div>
  1122 + </div>
  1123 + <!--Print Active Viewer-->
  1124 + <div class="print-box-active portrait-box-active" id="printBox" style="display: none;">
  1125 + <div id="printDivContent">
  1126 + <div class="">
  1127 + <div class="print-col-sm-4" style="top: 10px; position: absolute; left: 10px;">
  1128 + <span class="pull-left font12 print-span-font" id="spnModule"></span>
  1129 + </div>
  1130 + <div class="print-col-sm-4" style="top: 10px; position: absolute; right: 10px;">
  1131 + <span class="pull-right font12 print-span-font" id="spnBodyViewTitle"></span>
  1132 + </div>
  1133 + </div>
  1134 + <div class=" mar-top-25" align="center" id="dvPortrait" style="text-align: center;">
  1135 + <img src="" alt="" class="logo-image" id="snipImage" style="width: 100%;" />
  1136 + </div>
  1137 + <div>
  1138 + <div class="print-col-sm-4" style="position: absolute; bottom: 20px;">
  1139 + <span class="pull-left marginTop10 font12 print-span-font">Copyright {{current_year}} A.D.A.M., Inc. All Rights Reserved</span>
  1140 + </div>
  1141 + <div class="print-col-sm-4" style="position: absolute; bottom: 20px; right: 10px;">
  1142 + <span class="pull-right print-marginTop10 bgnone no-margin">
  1143 + <img class="logo-image" src="content/images/adam-logo-small.png" alt="">
  1144 + </span>
  1145 + </div>
  1146 + </div>
  1147 + <div class="clearfix"></div>
  1148 + </div>
  1149 + </div>
  1150 +
  1151 + <!--Print Preview Modal-->
  1152 + <div id="dvPrintPreview" style="display: none;"></div>
  1153 + </div>
  1154 + </div>
  1155 + <!--RESET PASSWORD FORM-->
  1156 + <div id="passwordReset" ng-show="isVisibleResetPass">
  1157 + <table width="500" border="0" align="center" cellpadding="0" cellspacing="0">
  1158 + <tbody>
  1159 + <tr>
  1160 + <td align="center" valign="middle" bgcolor="#393939 " style="padding:30px 0 20px 0;"><a href="#"><img src="../content/images/logo.png" alt="AIA" title="AIA" /></a></td>
  1161 + </tr>
  1162 + <tr>
  1163 + <td align="center" valign="top" bgcolor="#808d43" style="padding:20px; overflow:hidden;">
  1164 + <form name="resetPasswordForm" novalidate>
  1165 + <table width="100%" border="0" cellspacing="0" cellpadding="0" ng-controller="HomeController">
  1166 + <tbody>
  1167 +
  1168 + <tr>
  1169 + <td style=" font-size:26px; font-weight:bold; color:#fff; font-family:Gotham, 'Helvetica Neue', Helvetica, Arial, sans-serif"><strong>Reset Password</strong></td>
  1170 + </tr>
  1171 + <tr>
  1172 + <td>&nbsp;</td>
  1173 + </tr>
  1174 + <tr>
  1175 + <td style="font-family:Gotham, 'Helvetica Neue', Helvetica, Arial, sans-serif; color:#fff;">New Password </td>
  1176 + </tr>
  1177 + <tr>
  1178 + <td>
  1179 + <input class="form-control" name="newPassword" value="*****" type="password" style="padding:3px 5px; height:25px; width:98%;" ng-model="userInfo.newPassword" ng-minlength="8" ng-maxlength="20" required>
  1180 + <span style="color: maroon; font-weight:bold" ng-show="resetPasswordForm.newPassword.$touched && resetPasswordForm.newPassword.$invalid && resetPasswordForm.newPassword.$pristine">The password is required.</span>
  1181 + <p ng-show="resetPasswordForm.newPassword.$error.minlength" style="font-weight: bold; color: maroon;">Password length must be between 8 - 20 characters.</p>
  1182 + <p ng-show="resetPasswordForm.newPassword.$error.maxlength" style="font-weight: bold; color: maroon;">Password length must be between 8 - 20 characters.</p>
  1183 + </td>
  1184 + </tr>
  1185 + <tr>
  1186 + <td>&nbsp;</td>
  1187 + </tr>
  1188 + <tr>
  1189 + <td style="font-family:Gotham, 'Helvetica Neue', Helvetica, Arial, sans-serif; color:#fff;">Confirm Password </td>
  1190 + </tr>
  1191 +
  1192 + <tr>
  1193 + <td>
  1194 + <input class="form-control" name="confirmPassword" value="*****" type="password" style="padding:3px 5px; height:25px; width:98%;" ng-model="userInfo.confirmPassword" required>
  1195 + <span style="color: maroon; font-weight: bold; " ng-show="resetPasswordForm.confirmPassword.$touched && resetPasswordForm.confirmPassword.$invalid">Confirm password is required.</span>
  1196 + <span style="color: maroon; font-weight: bold; " ng-if="resetPasswordForm.newPassword !== resetPasswordForm.confirmPassword">{{passwordMismatchMessage}}</span>
  1197 + </td>
  1198 + </tr>
  1199 + <tr>
  1200 + <td>&nbsp;</td>
  1201 + </tr>
  1202 + <tr>
  1203 + <td>
  1204 + <button type="submit" ng-disabled="resetPasswordForm.$invalid" ng-click="ResetUserPassword(userInfo)" style="background: #0072a7; border: 1px solid #005076; cursor: pointer; color: #fff; padding: 5px 10px; font-size: 16px; text-transform: uppercase; text-align: center; text-decoration: none; font-family: gotham, 'Helvetica Neue', helvetica, arial, sans-serif; " id="btnUpdatePassword">Submit</button> <!--ng-submit="submitForm(resetPwdForm.$valid)"--> <!--ng-click="ResetUserPassword(userInfo)"-->
  1205 + </td>
  1206 + </tr>
  1207 + </tbody>
  1208 + </table>
  1209 + </form>
  1210 + </tr>
  1211 +
  1212 +
  1213 + </tbody>
  1214 + </table>
  1215 + </div>
  1216 +
  1217 + <div class="modal fade" id="messageModal" role="dialog">
  1218 + <div class="modal-dialog">
  1219 +
  1220 + <div class="modal-content">
  1221 + <div class="modal-header">
  1222 + <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
  1223 + </div>
  1224 + <div class="modal-title"></div>
  1225 + <div class="modal-body">{{errorMessage}}</div>
  1226 + <div class="modal-footer"> <button type="button" class="btn btn-primary" data-dismiss="modal">OK</button></div>
  1227 + </div>
  1228 + </div>
  1229 + </div>
  1230 +
  1231 + <!--Admin Form (Under Process)-->
  1232 +
  1233 +
  1234 + <!--Available modules list modal after login-->
  1235 + <div class=" fade ui-draggable in" id="dvUserModulesInfo" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" style="padding-left: 17px; display: none; left: 0px !important; z-index: 111111; position: fixed; top: 0; overflow-x: hidden; overflow-y: auto; right: 0px; bottom: 0px; ">
  1236 + <div class="modal-dialog" role="document">
  1237 + <div class="modal-content">
  1238 + <div class="modal-header ui-draggable-handle " style="color: #ffffff; background-color: #0095da; border-color: #007ab3;cursor:default;">
  1239 + <!--color: #e5e5e5;-->
  1240 + <!--bg-primary-->
  1241 + <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
  1242 + <h4 class="text-left lhgt19 padd5" style="color:#fff; text-align:left;">Coming Soon...</h4>
  1243 + </div>
  1244 +
  1245 + <div class="modal-body">
  1246 + <div class="panel-body">
  1247 + <!-- form -->
  1248 + <form class="form-horizontal">
  1249 +
  1250 + <!--<hr style="border: 1px solid;"/>-->
  1251 + <!--<hr style="border: 1px solid;" />-->
  1252 + <div>
  1253 + <div class="form-group" id="moduleDiv7">
  1254 + <div class="col-sm-12"><i>• Curriculum Builder</i></div> <!--(To be available by 09/25/2017)-->
  1255 + </div>
  1256 + <div class="form-group" id="moduleDiv8">
  1257 + <div class="col-sm-8"><i>• Anatomy Test</i></div> <!--(To be available by 08/28/2017)-->
  1258 + </div>
  1259 + <div class="form-group" id="moduleDiv13">
  1260 + <div class="col-sm-8">• A.D.A.M Images</div>
  1261 + </div>
  1262 + </div>
  1263 + <div class="form-group">
  1264 + <div style="text-align: center">
  1265 + <button type="button" class="btn btn-primary btn-sm" data-toggle="modal" data-target="#mymodal" data-dismiss="modal"><i class="fa fa-check"></i> OK</button>
  1266 + </div>
  1267 + </div>
  1268 + </form>
  1269 + </div>
  1270 + </div>
  1271 +
  1272 + </div>
  1273 + </div>
  1274 + </div>
  1275 +
  1276 + <!-- Terms & Condition Modal -->
  1277 + <div class=" fade ui-draggable in" id="dvTermCondition" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" style="padding-left: 17px; display: none; left: 0px !important; z-index: 111111; position: fixed; top: 0; overflow-x: hidden; overflow-y: auto; right: 0px; bottom: 0px; ">
  1278 + <div class="modal-dialog" role="document">
  1279 + <div class="modal-content">
  1280 + <div class="modal-header ui-draggable-handle " style="color: #ffffff; background-color: #0095da; border-color: #007ab3;cursor:default;">
  1281 + <!--color: #e5e5e5;-->
  1282 + <h6 class="text-left lhgt19 padd5" style="color:#fff; text-align:left;">Terms and Conditions</h6>
  1283 + </div>
  1284 +
  1285 + <div class="modal-body" style="width: 597px; height: 400px; overflow-x: auto;">
  1286 + <div class="panel-body">
  1287 + <div id="dvTerms" style="font-size: 13px;"></div>
  1288 + </div>
  1289 + </div>
  1290 + <div class="modal-footer ui-draggable-handle " style="color: #ffffff; cursor:default;">
  1291 + <!--background-color: #0095da; border-color: #007ab3;-->
  1292 + <!-- form -->
  1293 + <form class="form-horizontal">
  1294 + <!--<div class="form-group">-->
  1295 + <div style="clear: left; float: left; color: #000;"><input type="checkbox" id="chkAccept" ng-model="checked" style="vertical-align: top;" /> I accept</div>
  1296 + <div style="float: right;"><button type="button" class="btn btn-primary btn-sm" data-toggle="modal" data-target="#mymodal" ng-disabled="!checked" data-dismiss="modal" ng-click="UpdateLicenseTermStatus()"><i class="fa fa-check"></i> Next</button></div>
  1297 + <!--</div>-->
  1298 + </form>
  1299 + </div>
  1300 + </div>
  1301 + </div>
  1302 + </div>
  1303 + <script>
  1304 + function enableDisableFillOption() {
  1305 + if (document.getElementById('fill-option').checked) {
  1306 + // $('#imgOpacity').attr("background-color");
  1307 + //$('#imgOpacity').css({"background-color"})
  1308 + //$("#filloption1").css({ "pointer-events": "auto" });
  1309 + //$("#filloption12").css({ "pointer-events": "auto" });
  1310 +
  1311 + var x = $("#editstylebackgroundcolor span.minicolors-swatch-color").css('background-color');
  1312 + $("#imgOpacity").css("background-color", x);
  1313 + $("#edit-slider-3").css({ "pointer-events": "auto" });
  1314 + $("#edit-slider-4").css({ "pointer-events": "auto" });
  1315 + $("#editstylebackgroundcolor").css({ "pointer-events": "auto" });
  1316 + $("#editstyleTexture").css({ "pointer-events": "auto" });
  1317 + $(".enableDisableOpacity label").css({ "cursor": "pointer" });
  1318 + $(".enableDisableOpacity").css({ "opacity": "1" })
  1319 + document.getElementById("filloption1").disabled = false;
  1320 + document.getElementById("filloption2").disabled = false;
  1321 + document.getElementById("filloption1").style.cursor = "default";
  1322 + document.getElementById("filloption2").style.cursor = "default";
  1323 +
  1324 +
  1325 +
  1326 + }
  1327 + else {
  1328 + $('#imgOpacity').css("background-color", "transparent");
  1329 + //$("#filloption1").css({ "pointer-events": "none" });
  1330 + //$("#filloption2").css({ "pointer-events": "none" });
  1331 + $("#edit-slider-3").css({ "pointer-events": "none" });
  1332 + $("#edit-slider-4").css({ "pointer-events": "none" });
  1333 + $("#editstylebackgroundcolor").css({ "pointer-events": "none" });
  1334 + $("#editstyleTexture").css({ "pointer-events": "none" });
  1335 + $(".enableDisableOpacity label").css({ "cursor": "default" });
  1336 + $(".enableDisableOpacity").css({ "opacity": ".5" })
  1337 + document.getElementById("filloption1").disabled = true;
  1338 + document.getElementById("filloption2").disabled = true;
  1339 + document.getElementById("filloption1").style.cursor = "default";
  1340 + document.getElementById("filloption2").style.cursor = "default";
  1341 +
  1342 +
  1343 +
  1344 + }
  1345 +
  1346 + }
  1347 + function enableDisableOutline() {
  1348 +
  1349 + if (document.getElementById('Outline-Option').checked) {
  1350 + var x = $("#outlineColor span.minicolors-swatch-color").css('background-color');
  1351 + $(".marginTopBtm10 div.outlinediv").css("border-color", x);
  1352 + // var borderWidth = $("#outlineColor span.minicolors-swatch-color").css('border-width');
  1353 + // $("#imgOpacity").css("border-width", borderWidth);
  1354 +
  1355 + $("#borderWidthCanvasElement").css({ "pointer-events": "auto" });
  1356 + $("#outlineColor").css({ "pointer-events": "auto" });
  1357 + $(".setEnableDisableForEditShapeStyle").css({ "opacity": "1" })
  1358 + }
  1359 + else {
  1360 + $('.marginTopBtm10 div.outlinediv').css("border-color", "transparent");
  1361 + $("#borderWidthCanvasElement").css({ "pointer-events": "none" });
  1362 + $("#outlineColor").css({ "pointer-events": "none" });
  1363 + $(".setEnableDisableForEditShapeStyle").css({ "opacity": ".5" })
  1364 + }
  1365 + }
  1366 +
  1367 + </script>
  1368 +
  1369 + <script>
  1370 + function Brushsize(object) {
  1371 +
  1372 + object.value = object.value.replace(/[^0-9]/g, '');
  1373 + if (parseInt(object.value) <= 0) {
  1374 + object.value = 1;
  1375 + }
  1376 + if (parseInt(object.value) >= 1 && parseInt(object.value) <= 60) {
  1377 + object.value = object.value;
  1378 + }
  1379 + if (parseInt(object.value) > 60) {
  1380 + object.value = object.value.slice(0, 1);
  1381 +
  1382 + }
  1383 +
  1384 + }
  1385 + </script>
  1386 +
  1387 +
  1388 + <!--<script src="libs/jquery/1.11.3/jquery.min.js"></script>-->
  1389 + <script src="libs/jquery/2.1.3/jquery.min.js"></script>
  1390 + <script src="libs/jquery/1.11.4/jquery-ui.js"></script>
  1391 +
  1392 + <script src="libs/jquery/jquery_plugin/jquery.mCustomScrollbar.concat.min.js"></script>
  1393 + <script src="themes/default/scripts/bootstrap/3.3.5/bootstrap.js"></script>
  1394 + <script src="libs/angular/1.4.9/angular.min.js"></script>
  1395 + <script src="libs/angular/1.4.9/angular-route.min.js"></script>
  1396 + <script src="libs/angular/1.4.9/angular-sanitize.min.js"></script>
  1397 + <script src="libs/angular/1.4.9/ngStorage.js"></script>
  1398 + <script src="content/js/custom/custom.js"></script>
  1399 + <!--Annotation Toolbar : jcanvas Library-->
  1400 +
  1401 + <script src="libs/jcanvas/jcanvas.min.js"></script>
  1402 + <script src="libs/jcanvas/jcanvas.handle.min.js"></script>
  1403 +
  1404 + <script src="libs/jinqJs.js"></script>
  1405 + <script src="libs/jquery/jquery_plugin/jsPanel/jspanel/jquery.jspanel.js"></script>
  1406 + <script src="libs/video_4_12_11/video_4_12_11.js"></script>
  1407 + <script src="libs/jquery/jquery_plugin/SpeechBubble/bubble.js"></script>
  1408 + <!--<script src="libs/jquery/jquery_plugin/jsPanel/jspanel/jquery.jspanel.min.js"></script>-->
  1409 + <script src="app/main/AIA.js"></script>
  1410 + <script src="app/main/Link.js"></script>
  1411 + <script src="content/scripts/js/custom/custom.js"></script>
  1412 + <script src="app/filters/ColorMatrixFilter.js"></script>
  1413 + <script src="app/utility/Matrix.js"></script>
  1414 + <script src="app/utility/Point.js"></script>
  1415 + <script src="app/utility/Rectangle.js"></script>
  1416 + <script src="app/utility/BitmapData.js"></script>
  1417 + <script src="app/utility/Paint.js"></script>
  1418 + <script src="app/controllers/DAController.js"></script>
  1419 + <script src="app/controllers/CIController.js"></script>
  1420 + <script src="app/controllers/CAController.js"></script>
  1421 + <script src="app/controllers/3dAController.js"></script>
  1422 + <script src="app/controllers/CurrBuildController.js"></script>
  1423 + <script src="app/controllers/AnatTestController.js"></script>
  1424 + <script src="app/controllers/LabExercController.js"></script>
  1425 + <script src="app/controllers/ADAMImgController.js"></script>
  1426 + <script src="app/controllers/AODController.js"></script>
  1427 + <script src="app/controllers/HomeController.js"></script>
  1428 + <script src="app/controllers/LinkController.js"></script>
  1429 + <script src="app/services/AuthenticationService.js"></script>
  1430 + <script src="app/services/ConfigurationService.js"></script>
  1431 + <script src="app/services/AdminService.js"></script>
  1432 + <script src="app/controllers/TileViewListController.js"></script>
  1433 +
  1434 + <script src="app/services/ModuleService.js"></script>
  1435 +
  1436 + <script src="app/services/DataService.js"></script>
  1437 + <script src="app/services/TermService.js"></script>
  1438 + <script src="libs/jquery/jquery_plugin/jqueryui.js"></script>
  1439 + <script src="libs/jquery/jquery_plugin/slider-pips/jquery-ui-slider-pips.js"></script>
  1440 + <script src="../app/services/LabExerciseService.js"></script>
  1441 + <script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui-touch-punch/0.2.3/jquery.ui.touch-punch.min.js"></script>
  1442 +
  1443 + <script src="libs/jquery/jquery_plugin/color-picker/jquery.minicolors.min.js"></script>
  1444 + <!--<script src="libs/colorpicker/jquery.minicolors.min.js"></script>-->
  1445 + <!--<script src="libs/color-picker/jquery.minicolors.min.js"></script>-->
  1446 +
  1447 + <script src="libs/sketch.js"></script>
  1448 +
  1449 + <!--<script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/0.4.1/html2canvas.js"></script>-->
  1450 + <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/aes.js"></script>
  1451 + <script src="libs/html2canvas.js"></script>
  1452 + <script src="libs/FileSaver.js"></script>
  1453 + <script src="app/services/LabExerciseService.js"></script>
  1454 + <!--<script type="text/javascript">
  1455 + $(function () {
  1456 + $('#canvas').sketch();
  1457 + });
  1458 + </script>-->
  1459 +
  1460 + <script>
  1461 +
  1462 + $(function () {
  1463 + $('[data-toggle="tooltip"]').tooltip();
  1464 + })
  1465 +
  1466 + </script>
  1467 + <script>
  1468 + (function ($) {
  1469 + $(window).load(function () {
  1470 + $(".sidebar").mCustomScrollbar({
  1471 + autoHideScrollbar: true,
  1472 + //theme:"rounded"
  1473 + });
  1474 +
  1475 + });
  1476 + })(jQuery);
  1477 + </script>
  1478 + <script>
  1479 + $(function () {
  1480 + $(".modal").draggable();
  1481 + $(".annotationTollbar").draggable();
  1482 + $(".modeleditstyle").draggable();
  1483 + $("#annotationTextModal").draggable();
  1484 + $("#modal-settings").draggable();
  1485 + });
  1486 + </script>
  1487 +
  1488 +
  1489 +
  1490 +
  1491 + <script type="text/javascript">
  1492 + $(function () {
  1493 +
  1494 + $("#text-left").on('click', function () {
  1495 +
  1496 + //Annotation: Formatting buttons color is not change when select.
  1497 +
  1498 + $("#text-center").removeClass("ActiveFormattingButtonClass");
  1499 + $("#text-right").removeClass("ActiveFormattingButtonClass");
  1500 + $("#text-left").addClass("ActiveFormattingButtonClass");
  1501 + $("#text_area").css("text-align", "left");
  1502 +
  1503 +
  1504 + });
  1505 +
  1506 +
  1507 + $("#text-center").on('click', function () {
  1508 +
  1509 + //Annotation: Formatting buttons color is not change when select.
  1510 +
  1511 + $("#text-right").removeClass("ActiveFormattingButtonClass");
  1512 + $("#text-left").removeClass("ActiveFormattingButtonClass");
  1513 + $("#text-center").addClass("ActiveFormattingButtonClass");
  1514 + $("#text_area").css("text-align", "center");
  1515 +
  1516 +
  1517 + });
  1518 +
  1519 +
  1520 + $("#text-right").on('click', function () {
  1521 +
  1522 + //Annotation: Formatting buttons color is not change when select.
  1523 +
  1524 + $("#text-left").removeClass("ActiveFormattingButtonClass");
  1525 + $("#text-center").removeClass("ActiveFormattingButtonClass");
  1526 + $("#text-right").addClass("ActiveFormattingButtonClass");
  1527 + $("#text_area").css("text-align", "right");
  1528 + });
  1529 +
  1530 +
  1531 + $("#text-bold").on('click', function () {
  1532 +
  1533 + //Annotation: Formatting buttons color is not change when select.
  1534 + $("#text-bold").toggleClass("ActiveFormattingButtonClass");
  1535 +
  1536 + if ($("#text-bold").hasClass("ActiveFormattingButtonClass")) {
  1537 + $("#text_area").css("font-weight", "bold");
  1538 + }
  1539 + else {
  1540 + $("#text_area").css("font-weight", "normal");
  1541 + }
  1542 +
  1543 +
  1544 + });
  1545 +
  1546 + $("#text-italic").on('click', function () {
  1547 +
  1548 + //Annotation: Formatting buttons color is not change when select.
  1549 + $("#text-italic").toggleClass("ActiveFormattingButtonClass");
  1550 + if ($("#text-italic").hasClass("ActiveFormattingButtonClass")) {
  1551 + $("#text_area").css("font-style", "italic");
  1552 + }
  1553 + else {
  1554 + $("#text_area").css("font-style", "normal");
  1555 + }
  1556 + });
  1557 +
  1558 + $("#text-underline").on('click', function () {
  1559 +
  1560 + //Annotation: Formatting buttons color is not change when select.
  1561 + $("#text-underline").toggleClass("ActiveFormattingButtonClass");
  1562 +
  1563 + if ($("#text-underline").hasClass("ActiveFormattingButtonClass")) {
  1564 + $("#text_area").css("text-decoration", "underline");
  1565 + }
  1566 + else {
  1567 + $("#text_area").css("text-decoration", "none");
  1568 + }
  1569 +
  1570 +
  1571 + });
  1572 +
  1573 +
  1574 + $("#selected-font-size").change(function () {
  1575 +
  1576 + $("#text_area").css("font-size", $(this).val() + "px");
  1577 + });
  1578 +
  1579 + $("#selected-font-family").change(function () {
  1580 +
  1581 + $("#text_area").css("font-family", $(this).val());
  1582 +
  1583 + });
  1584 +
  1585 +
  1586 + });
  1587 +
  1588 +
  1589 +
  1590 + </script>
  1591 +
  1592 +
  1593 + <script>
  1594 + $(document).ready(function () {
  1595 + // $("#font-color .minicolors .minicolors-swatch .minicolors-swatch-color").addClass("ActiveDefaultColorAnnotation");
  1596 +
  1597 + var borderWidth = 1;
  1598 + var borderColor = "#000";
  1599 + $("#borderWidthCanvasElement").change(function () {
  1600 + borderWidth = $(this).val();
  1601 + borderColor = $('#outlineColor .minicolors >.minicolors-swatch > .minicolors-swatch-color').css("background-color");
  1602 +
  1603 + if (borderColor != null) {
  1604 + document.getElementById("imgOpacity").parentNode.style.border = borderWidth + "px" + " " + "solid" + " " + borderColor;
  1605 + //$("#imgOpacity").parent().css("border", borderWidth + "px" + " " + "solid" + borderColor);
  1606 + } else {
  1607 +
  1608 + // $("#imgOpacity").parent().css("border", borderWidth + "px" + " " + "solid");
  1609 + document.getElementById("imgOpacity").parentNode.style.border = borderWidth + "px" + " " + "solid" + " " + borderColor;
  1610 +
  1611 + }
  1612 + });
  1613 +
  1614 +
  1615 +
  1616 + $('.borderColorCanvasPreview').each(function () {
  1617 + // $("#font-color .minicolors .minicolors-swatch .minicolors-swatch-color").addClass("ActiveDefaultColorAnnotation");
  1618 + $(this).minicolors({
  1619 + control: $(this).attr('data-control') || 'hue',
  1620 + defaultValue: $(this).attr('data-defaultValue') || '',
  1621 + format: $(this).attr('data-format') || 'hex',
  1622 + keywords: $(this).attr('data-keywords') || '',
  1623 + inline: $(this).attr('data-inline') === 'true',
  1624 + letterCase: $(this).attr('data-letterCase') || 'lowercase',
  1625 + opacity: $(this).attr('data-opacity'),
  1626 + position: $(this).attr('data-position') || 'bottom left',
  1627 + swatches: $(this).attr('data-swatches') ? $(this).attr('data-swatches').split('|') : [],
  1628 + change: function (value, opacity) {
  1629 + if (!value) return;
  1630 + if (opacity) value += ', ' + opacity;
  1631 + if (typeof console === 'object') {
  1632 + console.log(value);
  1633 +
  1634 + borderColor = value;
  1635 + //$("#imgOpacity").parent().css("border", borderWidth + "px" + " " + "solid" + borderColor);
  1636 + document.getElementById("imgOpacity").parentNode.style.border = borderWidth + "px" + " " + "solid" + " " + borderColor;
  1637 +
  1638 +
  1639 + }
  1640 + },
  1641 + theme: 'bootstrap'
  1642 + });
  1643 +
  1644 +
  1645 + });
  1646 +
  1647 +
  1648 + $('.outerBackgroundColor').each(function () {
  1649 +
  1650 + $(this).minicolors({
  1651 + control: $(this).attr('data-control') || 'hue',
  1652 + defaultValue: $(this).attr('data-defaultValue') || '',
  1653 + format: $(this).attr('data-format') || 'hex',
  1654 + keywords: $(this).attr('data-keywords') || '',
  1655 + inline: $(this).attr('data-inline') === 'true',
  1656 + letterCase: $(this).attr('data-letterCase') || 'lowercase',
  1657 + opacity: $(this).attr('data-opacity'),
  1658 + position: $(this).attr('data-position') || 'bottom left',
  1659 + swatches: $(this).attr('data-swatches') ? $(this).attr('data-swatches').split('|') : [],
  1660 + change: function (value, opacity) {
  1661 + if (!value) return;
  1662 + if (opacity) value += ', ' + opacity;
  1663 + if (typeof console === 'object') {
  1664 + console.log(value);
  1665 + $("#imgOpacity").css("background-color", value);
  1666 +
  1667 + }
  1668 + },
  1669 + theme: 'bootstrap'
  1670 + });
  1671 +
  1672 + });
  1673 +
  1674 +
  1675 + });
  1676 + </script>
  1677 + <script>
  1678 + $(function () {
  1679 + function onBrushSizeChange() {
  1680 + $('.btnCursor').addClass('activebtncolor');
  1681 + $(".btn-annotation").removeClass("activebtncolor");
  1682 + $(".btn-annotation-erase").removeClass("activebtncolor");
  1683 + $(".btn-annotation-erase").removeClass("activebtncolor");
  1684 + $(".annotationpaintbrushsize").removeClass("activebtncolor");
  1685 + var x = $('#canvasPaint').css("z-index");
  1686 +
  1687 + var y = $('#canvas').css("z-index");
  1688 + if (x > y) {
  1689 + y = parseInt(x) + 1;
  1690 + } else {
  1691 + y = parseInt(y) + 1;
  1692 + }
  1693 + $('#canvas').css("z-index", y);
  1694 + }
  1695 +
  1696 + $("#slider-range-min-2").slider({
  1697 + range: "min",
  1698 + min: 1,
  1699 + max: 60,
  1700 + value: 1,
  1701 + slide: function (event, ui) {
  1702 +
  1703 + onBrushSizeChange();
  1704 +
  1705 +
  1706 +
  1707 + $("#btnBrushSize").val(ui.value);
  1708 +
  1709 + $("#annotationpaintbrushsize").css({ "pointer-events": "auto", "opacity": "1" });
  1710 + $("#annotationpainteraser").css({ "pointer-events": "auto", "opacity": "1" });
  1711 + $("#btnBrushSizeDecrease").css({ "pointer-events": "auto", "opacity": "1" });
  1712 + $("#btnBrushSizeDecrease").css({ "pointer-events": "auto", "opacity": "1" });
  1713 +
  1714 + },
  1715 + stop: function (event, ui) {
  1716 +
  1717 + $("#paintLine").attr("data-size", ui.value);
  1718 +
  1719 + }
  1720 +
  1721 + });
  1722 +
  1723 +
  1724 + $("#btnBrushSize").keydown(function () {
  1725 + $("#btnBrushSizeDecrease").css({ "pointer-events": "auto", "opacity": "1" });
  1726 + $("#btnBrushSizeDecrease").css({ "pointer-events": "auto", "opacity": "1" });
  1727 + onBrushSizeChange();
  1728 + var brushSizevalue = this.value;
  1729 +
  1730 + $("#slider-range-min-2").slider("value", parseInt(brushSizevalue));
  1731 + });
  1732 + $("#btnBrushSize").keyup(function () {
  1733 + onBrushSizeChange();
  1734 + var brushSizevalue = this.value;
  1735 + if (brushSizevalue == "") {
  1736 +
  1737 + $("#slider-range-min-2").slider("value", 0);
  1738 +
  1739 + $("#annotationpaintbrushsize").css({ "pointer-events": "none", "opacity": ".5" });
  1740 + $("#annotationpainteraser").css({ "pointer-events": "none", "opacity": ".5" });
  1741 + }
  1742 + else {
  1743 + $("#slider-range-min-2").slider("value", parseInt(brushSizevalue));
  1744 + $("#annotationpaintbrushsize").css({ "pointer-events": "auto", "opacity": "1" });
  1745 + $("#annotationpainteraser").css({ "pointer-events": "auto", "opacity": "1" });
  1746 + }
  1747 + // $("#slider-range-min-2").slider("value", parseInt(brushSizevalue));
  1748 + });
  1749 + $("#btnBrushSizeIncrement").click(function () {
  1750 + if ($("#annotationpaintbrushsize").css('pointer-events') == 'none') {
  1751 + $("#annotationpaintbrushsize").css({ "pointer-events": "auto", "opacity": "1" });
  1752 + $("#annotationpainteraser").css({ "pointer-events": "auto", "opacity": "1" });
  1753 + $("#btnBrushSizeDecrease").css({ "pointer-events": "auto", "opacity": "1" });
  1754 + $("#btnBrushSizeDecrease").css({ "pointer-events": "auto", "opacity": "1" });
  1755 + }
  1756 +
  1757 + onBrushSizeChange();
  1758 + var brushIncrementVar = $("#btnBrushSize").val();
  1759 + if (brushIncrementVar >= 60) {
  1760 + $("#slider-range-min-2").slider("value", 60);
  1761 + }
  1762 + else if (brushIncrementVar == "") {
  1763 + var brushIncrementedValue = 1;
  1764 + $("#btnBrushSize").val(brushIncrementedValue);
  1765 + $("#slider-range-min-2").slider("value", parseInt(brushIncrementedValue));
  1766 + }
  1767 + else {
  1768 +
  1769 + var brushIncrementedValue = parseInt(brushIncrementVar) + 1;
  1770 +
  1771 + $("#btnBrushSize").val(brushIncrementedValue);
  1772 + $("#slider-range-min-2").slider("value", parseInt(brushIncrementedValue));
  1773 + }
  1774 + });
  1775 + $("#btnBrushSizeDecrease").click(function () {
  1776 +
  1777 + onBrushSizeChange();
  1778 + var brushDecreaseVar = $("#btnBrushSize").val();
  1779 + if (brushDecreaseVar == "") {
  1780 +
  1781 + $("#btnBrushSizeDecrease").css({ "pointer-events": "none", "opacity": ".5" });
  1782 + $("#btnBrushSizeDecrease").css({ "pointer-events": "none", "opacity": ".5" });
  1783 +
  1784 + }
  1785 + else if (brushDecreaseVar <= 1) {
  1786 + $("#slider-range-min-2").slider("value", 1);
  1787 + if ($("#annotationpaintbrushsize").css('pointer-events') == 'none') {
  1788 + $("#annotationpaintbrushsize").css({ "pointer-events": "auto", "opacity": "1" });
  1789 + $("#annotationpainteraser").css({ "pointer-events": "auto", "opacity": "1" });
  1790 + $("#btnBrushSizeDecrease").css({ "pointer-events": "auto", "opacity": ".5" });
  1791 + $("#btnBrushSizeDecrease").css({ "pointer-events": "auto", "opacity": ".5" });
  1792 + }
  1793 +
  1794 + }
  1795 + else {
  1796 + var brushDecrementedValue = parseInt(brushDecreaseVar) - 1;
  1797 + if ($("#annotationpaintbrushsize").css('pointer-events') == 'none') {
  1798 + $("#annotationpaintbrushsize").css({ "pointer-events": "auto", "opacity": "1" });
  1799 + $("#annotationpainteraser").css({ "pointer-events": "auto", "opacity": "1" });
  1800 + $("#btnBrushSizeDecrease").css({ "pointer-events": "auto", "opacity": "1" });
  1801 + $("#btnBrushSizeDecrease").css({ "pointer-events": "auto", "opacity": "1" });
  1802 + }
  1803 + $("#btnBrushSize").val(brushDecrementedValue);
  1804 + $("#slider-range-min-2").slider("value", parseInt(brushDecrementedValue));
  1805 + }
  1806 + });
  1807 +
  1808 + $("#btnBrushSize").val($("#slider-range-min-2").slider("value"));
  1809 + });
  1810 + </script>
  1811 +
  1812 + <script>
  1813 + $(function () {
  1814 + $("#slider-range-min-3").slider({
  1815 + range: "min",
  1816 + min: 0,
  1817 + max: 100,
  1818 + value: 20,
  1819 + change: function (event, ui) {
  1820 +
  1821 +
  1822 + }
  1823 + });
  1824 +
  1825 +
  1826 +
  1827 + });
  1828 + </script>
  1829 +
  1830 + <script>
  1831 + $(function () {
  1832 +
  1833 +
  1834 +
  1835 + $("#slider-range-min-4").slider(
  1836 + {
  1837 + range: "min",
  1838 + value: .5,
  1839 + min: 0,
  1840 + max: 1,
  1841 + step: .1,
  1842 + slide: function (event, ui) {
  1843 +
  1844 + $(".marginTopBtm10 .imgopacity").css("opacity", ui.value);
  1845 + $(".marginTopBtm10 div.outlinediv").css("opacity", ui.value);
  1846 + }
  1847 +
  1848 + }
  1849 +
  1850 +);
  1851 +
  1852 + });
  1853 +
  1854 +
  1855 +
  1856 + </script>
  1857 +
  1858 +
  1859 +
  1860 + <script>
  1861 + $(function () {
  1862 +
  1863 +
  1864 + $("#OnIdentify").on('mouseover', function () {
  1865 + $("#identify-block").addClass("custom-tooltip-annotation");
  1866 + $(".custom-tooltip-annotation").css('display', 'block');
  1867 + }).on('mouseout', function () {
  1868 + // $("#identify-block").removeClass("custom-tooltip-annotation");
  1869 + $(".custom-tooltip-annotation").css('display', 'none');
  1870 + $("#identify-block").removeClass("custom-tooltip-annotation");
  1871 + });
  1872 +
  1873 +
  1874 + $("#DrawMode").on('mouseover', function () {
  1875 + $("#draw-block").addClass("custom-tooltip-annotation");
  1876 + $(".custom-tooltip-annotation").css('display', 'block');
  1877 +
  1878 + }).on('mouseout', function () {
  1879 +
  1880 + $(".custom-tooltip-annotation").css('display', 'none');
  1881 + $("#draw-block").removeClass("custom-tooltip-annotation");
  1882 + });
  1883 +
  1884 + //#7931
  1885 + $("#OnEdtShape").on('mouseover', function () {
  1886 + $("#edit-block").addClass("custom-tooltip-annotation-edit");
  1887 + $(".custom-tooltip-annotation-edit").css('display', 'block');
  1888 +
  1889 + }).on('mouseout', function () {
  1890 +
  1891 + $(".custom-tooltip-annotation-edit").css('display', 'none');
  1892 + $("#edit-block").removeClass("custom-tooltip-annotation-edit");
  1893 + });
  1894 +
  1895 + });
  1896 + </script>
  1897 + <!-- Export Image Save Click-->
  1898 + <script>
  1899 + $(function () {
  1900 + $("#btnPrintPreview").click(function () {
  1901 + $("#canvasDiv").append("<img id='exportlogo' class='img-responsive' src='content/images/adam-logo-small.png'/>");
  1902 + html2canvas($("#canvasDiv"), {
  1903 + onrendered: function (canvas) {
  1904 + var imgsrc = canvas.toDataURL("image/png");
  1905 + console.log(imgsrc);
  1906 + var html = '<div id="img"><img src="' + imgsrc + '" id="newimg" style="margin:auto;top:0px;left:0px;right:0px;position:absolute;border:1px solid #ccc;" /></div>';
  1907 + var w = window.open();
  1908 + $(w.document.body).html(html);
  1909 + $("#filename").val("");
  1910 + $("#exportlogo").remove();
  1911 + }
  1912 + });
  1913 +
  1914 + });
  1915 + $("#btnSaveEI").click(function () {
  1916 + $("#canvasDiv").append("<img id='exportlogo' class='img-responsive' src='content/images/adam-logo-small.png'/>");
  1917 + html2canvas($("#canvasDiv"), {
  1918 + onrendered: function (canvas) {
  1919 + theCanvas = canvas;
  1920 + var fileName = document.getElementById("filename").value + '.jpg';
  1921 + if (typeof (fileName) == "undefined" || fileName == ".jpg")
  1922 + fileName = "Untitled.jpg"
  1923 + var dataURL = canvas.toDataURL("image/jpeg");
  1924 + var blob = dataURItoBlob(dataURL);
  1925 + console.log(blob);
  1926 + saveAs(blob, fileName);
  1927 + $("#exportlogo").remove();
  1928 + $("#filename").val("");
  1929 + }
  1930 + });
  1931 + $(".export-image").css("display", "none");
  1932 +
  1933 + });
  1934 + });
  1935 + function dataURItoBlob(dataURI) {
  1936 + var byteString = atob(dataURI.split(',')[1]);
  1937 + var ab = new ArrayBuffer(byteString.length);
  1938 + var ia = new Uint8Array(ab);
  1939 + for (var i = 0; i < byteString.length; i++) {
  1940 + ia[i] = byteString.charCodeAt(i);
  1941 + }
  1942 + return new Blob([ab], { type: 'image/jpeg' });
  1943 + }
  1944 + </script>
  1945 + <script>
  1946 + if (navigator.userAgent.match(/Android/i)) {
  1947 +
  1948 + $("#bodySystems").click(function () {
  1949 +
  1950 + $("#listManager").draggable('disable');
  1951 +
  1952 + }).blur(function () {
  1953 +
  1954 + $("#listManager").draggable('enable');
  1955 +
  1956 + });
  1957 +
  1958 +
  1959 +
  1960 + $("#termList").click(function () {
  1961 +
  1962 + $("#listManager").draggable('disable');
  1963 +
  1964 + }).blur(function () {
  1965 +
  1966 + $("#listManager").draggable('enable');
  1967 +
  1968 + });
  1969 +
  1970 + $("#borderWidthCanvasElement").click(function () {
  1971 +
  1972 + $("#modeleditstyle").draggable('disable');
  1973 + }).blur(function () {
  1974 + $("#modeleditstyle").draggable('enable');
  1975 + });
  1976 + }
  1977 + function ResizeImage(sizePercent) {
  1978 + var autoWidth = 427;
  1979 + var autoHeight = 547;
  1980 + var dvAutoSpnFontSize = 12;
  1981 + var imgLogoW = 77;
  1982 + var fullWidth = 620; //$('#canvasDiv').width();
  1983 + var fullHeight = 876; //$('#canvasDiv').height();
  1984 +
  1985 + if (sizePercent == 0) {
  1986 + $('#printBoxPor').width(autoWidth).height(autoHeight);//.height(dvPrintBoxPorH * sizePercent);
  1987 + $('#printBoxLan').width(autoHeight).height(autoWidth);
  1988 + $('#dvPortrait').width(autoWidth);
  1989 + $('#dvLandscape').width(autoHeight);
  1990 + $('.span-font').attr('style', 'font-size: ' + (dvAutoSpnFontSize * .65).toFixed() + 'px');
  1991 + $(".logo-image").attr('width', imgLogoW * .65);
  1992 + }
  1993 +
  1994 + else if (sizePercent == 1) {
  1995 + $('#dvPortrait').width(fullWidth * sizePercent);
  1996 + $('#dvLandscape').width(fullHeight * sizePercent);
  1997 + $('#printBoxPor').width(fullWidth * sizePercent).height(fullHeight * sizePercent);
  1998 + $('#printBoxLan').width(fullHeight * sizePercent).height(fullWidth * sizePercent);
  1999 + $('.span-font').attr('style', 'font-size: ' + dvAutoSpnFontSize + 'px');
  2000 + $(".logo-image").attr('width', imgLogoW);
  2001 + }
  2002 +
  2003 + else {
  2004 + $('#dvPortrait').width(fullWidth * sizePercent);
  2005 + $('#dvLandscape').width(fullHeight * sizePercent);
  2006 + $('.span-font').attr('style', 'font-size: ' + (dvAutoSpnFontSize * sizePercent).toFixed() + 'px !important');
  2007 + $(".logo-image").attr('width', (imgLogoW * sizePercent).toFixed());
  2008 + if (sizePercent > 1) {
  2009 + $('#printBoxPor').width(fullWidth * sizePercent).height(fullHeight * sizePercent);
  2010 + $('#printBoxLan').width(fullHeight * sizePercent).height(fullWidth * sizePercent);
  2011 + }
  2012 + else {
  2013 + $('#printBoxPor').width(fullWidth * sizePercent).height(fullHeight * sizePercent);
  2014 + $('#printBoxLan').width(fullHeight * sizePercent).height(fullWidth * sizePercent);
  2015 + }
  2016 + }
  2017 + }
  2018 + </script>
  2019 + <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-browser/0.1.0/jquery.browser.min.js"></script>
  2020 +</body>
  2021 +
  2022 +</html>
0 2023 \ No newline at end of file
... ...
400-SOURCECODE/AIAHTML5.Web/index.aspx.cs 0 → 100644
  1 +using System;
  2 +using System.Collections.Generic;
  3 +using System.Linq;
  4 +using System.Web;
  5 +using System.Web.UI;
  6 +using System.Web.UI.WebControls;
  7 +
  8 +namespace ADAM.AIA
  9 +{
  10 + public partial class index : System.Web.UI.Page
  11 + {
  12 + public string strIPAddress = "";
  13 + public bool bValidIP = false;
  14 + public string strAccountNumber = "";
  15 + public string strEdition = "";
  16 + public string strUrlReferer = "";
  17 + public string strSiteReferer = "";
  18 + public string urlParams = "";
  19 + public string test = "";
  20 + public bool isCalsCredantial = false;
  21 +
  22 + protected void Page_Load(object sender, EventArgs e)
  23 + {
  24 +
  25 +
  26 + if (Request.HttpMethod == "POST")
  27 + {
  28 + if (Request.Form["calsCredantial"] != null && Request.Form["calsCredantial"].ToString() == "yes")
  29 + {
  30 + isCalsCredantial = true;
  31 +
  32 + urlParams = "calsCredantial=" + Request.Form["calsCredantial"].ToString() + "&username=" + Request.Form["calsUsername"].ToString() + "&password=" + Request.Form["calsPassword"].ToString();
  33 + //calsCredantialusername&password
  34 + // urlParams = Request.Form["calsCredantial"].ToString() + "&username=" + Request.Form["calsUsername"].ToString() + "&password=" + Request.Form["calsPassword"].ToString();
  35 +
  36 + }
  37 + }
  38 +
  39 + string c = "nm";
  40 + if (Request.QueryString["account"] != null)
  41 + {
  42 + // http://stackoverflow.com/questions/9032005/request-servervariableshttp-referer-is-not-working-in-ie
  43 + // http://stackoverflow.com/questions/5643773/http-referrer-not-always-being-passed?rq=1
  44 + //
  45 + strSiteReferer = Request.ServerVariables["HTTP_REFERER"];
  46 + strAccountNumber = Request.QueryString["account"];
  47 + strEdition = Request.QueryString["edition"];
  48 + string remoteIPAddress = Request.ServerVariables["REMOTE_ADDR"];
  49 + string strHttpReferer = null;
  50 + int intSiteId = 0;
  51 +
  52 +
  53 +
  54 +
  55 + if (Request.Form["referer"] != null)
  56 + {
  57 + strUrlReferer = Request.Form["referer"];
  58 + }
  59 + else if (Request.QueryString["referer"] == null)
  60 + {
  61 + strUrlReferer = Request.ServerVariables["HTTP_REFERER"];
  62 + }
  63 + else if (Request.Params["referer"] != null)
  64 + {
  65 + strUrlReferer = Request.Params["referer"];
  66 + }
  67 + else
  68 + {
  69 +
  70 + strUrlReferer = Request.QueryString["referer"];
  71 + }
  72 +
  73 +
  74 + if (strUrlReferer != "" && strUrlReferer != null)
  75 + {
  76 + strHttpReferer = strUrlReferer.ToLower().Replace("http://", "").Replace("https://", "").Replace("www.", "").ToString().Split('/')[0].ToString();
  77 +
  78 + if (strHttpReferer.IndexOf(":") != -1)
  79 + {
  80 + char[] delimiters = new char[] { ':' };
  81 + string[] parts = strHttpReferer.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);
  82 + strHttpReferer = parts[0];
  83 + }
  84 + }
  85 +
  86 + try
  87 + {
  88 +
  89 + if (strHttpReferer != "" && strHttpReferer != null)
  90 + strIPAddress = strHttpReferer;
  91 + if (strIPAddress == "" || strIPAddress == null)
  92 + strIPAddress = remoteIPAddress;
  93 +
  94 +
  95 + // intSiteId = LicenseHelper.GetInstance().ValidateLicenseSiteIP(strIPAddress, remoteIPAddress, strAccountNumber, Convert.ToByte(strEdition));
  96 +
  97 + }
  98 + catch (Exception objEx)
  99 + {
  100 +
  101 + }
  102 + //urlParams = "?siteIP=" + strIPAddress + "&status=" + intSiteId + "&accountNumber=" + strAccountNumber + "&edition=" + strEdition + "&urlReferer=" + (strSiteReferer != "" && strSiteReferer != null ? strSiteReferer : "");
  103 + urlParams = "siteIP=" + strIPAddress + "&accountNumber=" + strAccountNumber + "&edition=" + strEdition + "&urlReferer=" + (strSiteReferer != "" && strSiteReferer != null ? strSiteReferer : "") + "&remoteIPAddress=" + remoteIPAddress;
  104 +
  105 + //For the ease of splitting desgined urlParms in the pattern of
  106 + //urlParams = siteIP&accountNumber&remoteIPAddress&edition&urlReferer; without mentioning the variableName
  107 + // urlParams = strIPAddress + "&" + remoteIPAddress+"&"+ strAccountNumber + "&" + strEdition + "&" + (strSiteReferer != "" && strSiteReferer != null ? strSiteReferer : "");
  108 +
  109 +
  110 + }
  111 + }
  112 + }
  113 +}
0 114 \ No newline at end of file
... ...
400-SOURCECODE/AIAHTML5.Web/index.aspx.designer.cs 0 → 100644
  1 +//------------------------------------------------------------------------------
  2 +// <auto-generated>
  3 +// This code was generated by a tool.
  4 +//
  5 +// Changes to this file may cause incorrect behavior and will be lost if
  6 +// the code is regenerated.
  7 +// </auto-generated>
  8 +//------------------------------------------------------------------------------
  9 +
  10 +namespace ADAM.AIA {
  11 +
  12 +
  13 + public partial class index {
  14 + }
  15 +}
... ...
400-SOURCECODE/AIAHTML5.Web/index.html renamed to 400-SOURCECODE/AIAHTML5.Web/index1.html
... ... @@ -1422,6 +1422,7 @@
1422 1422 <script src="app/controllers/HomeController.js"></script>
1423 1423 <script src="app/controllers/LinkController.js"></script>
1424 1424 <script src="app/services/AuthenticationService.js"></script>
  1425 + <script src="app/services/ConfigurationService.js"></script>
1425 1426 <script src="app/services/AdminService.js"></script>
1426 1427 <script src="app/controllers/TileViewListController.js"></script>
1427 1428  
... ... @@ -1441,6 +1442,7 @@
1441 1442 <script src="libs/sketch.js"></script>
1442 1443  
1443 1444 <!--<script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/0.4.1/html2canvas.js"></script>-->
  1445 + <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/aes.js"></script>
1444 1446 <script src="libs/html2canvas.js"></script>
1445 1447 <script src="libs/FileSaver.js"></script>
1446 1448 <script src="app/services/LabExerciseService.js"></script>
... ...
400-SOURCECODE/AIAHTML5.Web/libs/crypto-js/3.1.9-1/aes.js 0 → 100644
  1 +;(function (root, factory, undef) {
  2 + if (typeof exports === "object") {
  3 + // CommonJS
  4 + module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core"));
  5 + }
  6 + else if (typeof define === "function" && define.amd) {
  7 + // AMD
  8 + define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory);
  9 + }
  10 + else {
  11 + // Global (browser)
  12 + factory(root.CryptoJS);
  13 + }
  14 +}(this, function (CryptoJS) {
  15 +
  16 + (function () {
  17 + // Shortcuts
  18 + var C = CryptoJS;
  19 + var C_lib = C.lib;
  20 + var BlockCipher = C_lib.BlockCipher;
  21 + var C_algo = C.algo;
  22 +
  23 + // Lookup tables
  24 + var SBOX = [];
  25 + var INV_SBOX = [];
  26 + var SUB_MIX_0 = [];
  27 + var SUB_MIX_1 = [];
  28 + var SUB_MIX_2 = [];
  29 + var SUB_MIX_3 = [];
  30 + var INV_SUB_MIX_0 = [];
  31 + var INV_SUB_MIX_1 = [];
  32 + var INV_SUB_MIX_2 = [];
  33 + var INV_SUB_MIX_3 = [];
  34 +
  35 + // Compute lookup tables
  36 + (function () {
  37 + // Compute double table
  38 + var d = [];
  39 + for (var i = 0; i < 256; i++) {
  40 + if (i < 128) {
  41 + d[i] = i << 1;
  42 + } else {
  43 + d[i] = (i << 1) ^ 0x11b;
  44 + }
  45 + }
  46 +
  47 + // Walk GF(2^8)
  48 + var x = 0;
  49 + var xi = 0;
  50 + for (var i = 0; i < 256; i++) {
  51 + // Compute sbox
  52 + var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4);
  53 + sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63;
  54 + SBOX[x] = sx;
  55 + INV_SBOX[sx] = x;
  56 +
  57 + // Compute multiplication
  58 + var x2 = d[x];
  59 + var x4 = d[x2];
  60 + var x8 = d[x4];
  61 +
  62 + // Compute sub bytes, mix columns tables
  63 + var t = (d[sx] * 0x101) ^ (sx * 0x1010100);
  64 + SUB_MIX_0[x] = (t << 24) | (t >>> 8);
  65 + SUB_MIX_1[x] = (t << 16) | (t >>> 16);
  66 + SUB_MIX_2[x] = (t << 8) | (t >>> 24);
  67 + SUB_MIX_3[x] = t;
  68 +
  69 + // Compute inv sub bytes, inv mix columns tables
  70 + var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100);
  71 + INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8);
  72 + INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16);
  73 + INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24);
  74 + INV_SUB_MIX_3[sx] = t;
  75 +
  76 + // Compute next counter
  77 + if (!x) {
  78 + x = xi = 1;
  79 + } else {
  80 + x = x2 ^ d[d[d[x8 ^ x2]]];
  81 + xi ^= d[d[xi]];
  82 + }
  83 + }
  84 + }());
  85 +
  86 + // Precomputed Rcon lookup
  87 + var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];
  88 +
  89 + /**
  90 + * AES block cipher algorithm.
  91 + */
  92 + var AES = C_algo.AES = BlockCipher.extend({
  93 + _doReset: function () {
  94 + // Skip reset of nRounds has been set before and key did not change
  95 + if (this._nRounds && this._keyPriorReset === this._key) {
  96 + return;
  97 + }
  98 +
  99 + // Shortcuts
  100 + var key = this._keyPriorReset = this._key;
  101 + var keyWords = key.words;
  102 + var keySize = key.sigBytes / 4;
  103 +
  104 + // Compute number of rounds
  105 + var nRounds = this._nRounds = keySize + 6;
  106 +
  107 + // Compute number of key schedule rows
  108 + var ksRows = (nRounds + 1) * 4;
  109 +
  110 + // Compute key schedule
  111 + var keySchedule = this._keySchedule = [];
  112 + for (var ksRow = 0; ksRow < ksRows; ksRow++) {
  113 + if (ksRow < keySize) {
  114 + keySchedule[ksRow] = keyWords[ksRow];
  115 + } else {
  116 + var t = keySchedule[ksRow - 1];
  117 +
  118 + if (!(ksRow % keySize)) {
  119 + // Rot word
  120 + t = (t << 8) | (t >>> 24);
  121 +
  122 + // Sub word
  123 + t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];
  124 +
  125 + // Mix Rcon
  126 + t ^= RCON[(ksRow / keySize) | 0] << 24;
  127 + } else if (keySize > 6 && ksRow % keySize == 4) {
  128 + // Sub word
  129 + t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];
  130 + }
  131 +
  132 + keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;
  133 + }
  134 + }
  135 +
  136 + // Compute inv key schedule
  137 + var invKeySchedule = this._invKeySchedule = [];
  138 + for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) {
  139 + var ksRow = ksRows - invKsRow;
  140 +
  141 + if (invKsRow % 4) {
  142 + var t = keySchedule[ksRow];
  143 + } else {
  144 + var t = keySchedule[ksRow - 4];
  145 + }
  146 +
  147 + if (invKsRow < 4 || ksRow <= 4) {
  148 + invKeySchedule[invKsRow] = t;
  149 + } else {
  150 + invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^
  151 + INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]];
  152 + }
  153 + }
  154 + },
  155 +
  156 + encryptBlock: function (M, offset) {
  157 + this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);
  158 + },
  159 +
  160 + decryptBlock: function (M, offset) {
  161 + // Swap 2nd and 4th rows
  162 + var t = M[offset + 1];
  163 + M[offset + 1] = M[offset + 3];
  164 + M[offset + 3] = t;
  165 +
  166 + this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);
  167 +
  168 + // Inv swap 2nd and 4th rows
  169 + var t = M[offset + 1];
  170 + M[offset + 1] = M[offset + 3];
  171 + M[offset + 3] = t;
  172 + },
  173 +
  174 + _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {
  175 + // Shortcut
  176 + var nRounds = this._nRounds;
  177 +
  178 + // Get input, add round key
  179 + var s0 = M[offset] ^ keySchedule[0];
  180 + var s1 = M[offset + 1] ^ keySchedule[1];
  181 + var s2 = M[offset + 2] ^ keySchedule[2];
  182 + var s3 = M[offset + 3] ^ keySchedule[3];
  183 +
  184 + // Key schedule row counter
  185 + var ksRow = 4;
  186 +
  187 + // Rounds
  188 + for (var round = 1; round < nRounds; round++) {
  189 + // Shift rows, sub bytes, mix columns, add round key
  190 + var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++];
  191 + var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++];
  192 + var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++];
  193 + var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++];
  194 +
  195 + // Update state
  196 + s0 = t0;
  197 + s1 = t1;
  198 + s2 = t2;
  199 + s3 = t3;
  200 + }
  201 +
  202 + // Shift rows, sub bytes, add round key
  203 + var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++];
  204 + var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++];
  205 + var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++];
  206 + var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++];
  207 +
  208 + // Set output
  209 + M[offset] = t0;
  210 + M[offset + 1] = t1;
  211 + M[offset + 2] = t2;
  212 + M[offset + 3] = t3;
  213 + },
  214 +
  215 + keySize: 256/32
  216 + });
  217 +
  218 + /**
  219 + * Shortcut functions to the cipher's object interface.
  220 + *
  221 + * @example
  222 + *
  223 + * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);
  224 + * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg);
  225 + */
  226 + C.AES = BlockCipher._createHelper(AES);
  227 + }());
  228 +
  229 +
  230 + return CryptoJS.AES;
  231 +
  232 +}));
0 233 \ No newline at end of file
... ...