Commit d0cc41a6705fe12324f39a833f85d93cb21e533e

Authored by Nikita Kulshreshtha
1 parent ad052ea0

Added site url code. Not complted.

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,42 @@ 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 +
  50 + public const string STATUS_OK = "ok";
  51 + public const string STATUS_NOT_OK = "notok";
  52 + public const int NO_ERROR = 0;
  53 + public const int RUN_TIME_EXCEPTION = 10000;
  54 +
  55 + public const String SITE_IP = "siteIP";
  56 + public const String SITE_ID = "siteId";
  57 + public const String TERM_CONDITION = "termCondition";
  58 + public const String MODESTY_SETTING = "modestySetting";
  59 +
  60 + public const Byte SUPER_ADMIN = 1;
  61 + public const Byte GENERAL_ADMIN = 2;
  62 + public const String USER_NAME = "username";
  63 + public const String PASSWORD = "password";
  64 + public const String ERROR_ID = "errorId";
  65 + public const String LICENSE_ACTIVE = "licenceActive";
  66 + public const String ACCOUNT_NUMBER = "accountNumber";
  67 + public const String LICENSE_TYPE_ID = "licenceTypeId";
  68 + public const String TOTAL_LOGIN = "totalLogin";
  69 + public const String EDITION_ID = "editionId";
  70 + public const String URL_REFERER = "urlReferer";
  71 + public const String USER_CONTEXT = "usercontext";
  72 +
  73 + public const Byte CONCURRENT_USER = 6;
  74 + public const Byte SINGLE_USER = 5;
  75 + public const Byte SITE_USER = 9;
  76 +
  77 + public const String LICENSE_ID = "licenseId";
  78 + public const Byte LICENSE_TYPE_CONCURRENT = 1;
  79 + public const Byte LICENSE_TYPE_SINGLE = 2;
  80 + public const Byte LICENSE_TYPE_SITE = 3;
  81 + public const Byte LICENSE_TYPE_RESELLER = 4;
  82 + public const Byte LICENSE_TYPE_TEST = 5;
  83 +
47 84 }
48 85 }
49 86 \ 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 +
  11 +namespace AIAHTML5.API.Controllers
  12 +{
  13 + public class ClientController : ApiController
  14 + {
  15 + // GET api/client
  16 + public IEnumerable<string> Get()
  17 + {
  18 + return new string[] { "value1", "value2" };
  19 + }
  20 +
  21 + // GET api/client/5
  22 + public string Get(int id)
  23 + {
  24 + return "value";
  25 + }
  26 +
  27 + // POST api/client
  28 + public HttpResponseMessage Post([FromBody]JObject siteUrl)
  29 + {
  30 + HttpResponseMessage response = null;
  31 +
  32 + int siteId = AIAHTML5.API.Models.Users.ValidateLicenseSiteIP(siteUrl["siteIP"].ToString(), siteUrl["remoteIPAddress"].ToString(), siteUrl["accountNumber"].ToString(), Convert.ToByte(siteUrl["edition"].ToString()));
  33 + int x = AIAHTML5.API.Models.Users.ValidateSiteLogin(siteUrl["siteIP"].ToString(),siteUrl["accountNumber"].ToString(),siteUrl["urlReferer"].ToString(),siteUrl["edition"].ToString(),siteId)
  34 + response = new HttpResponseMessage { StatusCode = HttpStatusCode.OK, Content = new StringContent(AIAConstants.VALIDATED_CLIENT) };
  35 +
  36 + return response;
  37 + }
  38 +
  39 + // PUT api/client/5
  40 + public void Put(int id, [FromBody]string value)
  41 + {
  42 + }
  43 +
  44 + // DELETE api/client/5
  45 + public void Delete(int id)
  46 + {
  47 + }
  48 + }
  49 +}
... ...
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 ((bool)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.Web;
  5 +
  6 +namespace AIAHTML5.API.Models
  7 +{
  8 + public class IPValidator
  9 + {
  10 + public static Double ChangeIpToDouble(String ipVal)
  11 + {
  12 + String[] resultArray = new String[20];
  13 + //Array resultArray ;
  14 + String n = ipVal;
  15 + String[] array = n.Split('.');
  16 + for (int i = 0; i < array.Length; i++)
  17 + {
  18 + if (array[i].Length == 1)
  19 + {
  20 + array[i] = "00" + array[i];
  21 + resultArray[i] = (array[i]);
  22 + }
  23 + else if (array[i].Length == 2)
  24 + {
  25 + array[i] = "0" + array[i];
  26 + resultArray[i] = (array[i]);
  27 + }
  28 + else
  29 + {
  30 + array[i] = array[i];
  31 + resultArray[i] = (array[i]);
  32 + }
  33 + }
  34 +
  35 + //String theContent = resultArray.ToString();
  36 + String theContent = "";
  37 +
  38 + for (int i = 0; i <= resultArray.Length - 1; i++)
  39 + {
  40 + if (!String.IsNullOrEmpty(resultArray[i]))
  41 + theContent += resultArray[i];
  42 + }
  43 + theContent = (theContent == "" ? "0" : theContent);
  44 +
  45 + return Convert.ToDouble(theContent);
  46 + //return theContent;
  47 + }
  48 +
  49 +
  50 + public static bool ValidateIP(String strSiteIp, String strSiteIPTo, String strSiteMasterIPTo, String strIPToValidate, int intIsMaster)
  51 + {
  52 + Double dblSiteIP = 0;
  53 + Double dblSiteIPTo = 0;
  54 + Double dblSiteMIPTo = 0;
  55 + Double dblIPToValidate = 0;
  56 + bool boolReturn = false;
  57 +
  58 + try
  59 + {
  60 + // Convert all IP to double values
  61 + dblSiteIP = ChangeIpToDouble(((strSiteIp == "" || IsNumericIP(strSiteIp) == false) ? "0" : strSiteIp));
  62 + dblSiteIPTo = ChangeIpToDouble(((strSiteIPTo == "" || IsNumericIP(strSiteIPTo) == false) ? "0" : strSiteIPTo));
  63 + dblSiteMIPTo = ChangeIpToDouble(((strSiteMasterIPTo == "" || IsNumericIP(strSiteMasterIPTo) == false) ? "0" : strSiteMasterIPTo));
  64 + dblIPToValidate = ChangeIpToDouble(((strIPToValidate == "" || IsNumericIP(strIPToValidate) == false) ? "0" : strIPToValidate));
  65 +
  66 + if (intIsMaster > 0)
  67 + {
  68 + if (dblSiteIP == dblIPToValidate)
  69 + boolReturn = true;
  70 +
  71 + if (dblSiteIPTo > 0 && dblSiteMIPTo > 0)
  72 + {
  73 + if (isBetween(dblIPToValidate, dblSiteIPTo, dblSiteMIPTo) == true)
  74 + {
  75 + boolReturn = true;
  76 + }
  77 + }
  78 + else if (dblSiteIPTo > 0)
  79 + {
  80 + if (dblSiteIPTo == dblIPToValidate)
  81 + boolReturn = true;
  82 + }
  83 + else if (dblSiteMIPTo > 0)
  84 + {
  85 + if (dblSiteMIPTo == dblIPToValidate)
  86 + boolReturn = true;
  87 + }
  88 + }
  89 + else
  90 + {
  91 + if (dblSiteIP > 0 && dblSiteIPTo > 0)
  92 + {
  93 + if (isBetween(dblIPToValidate, dblSiteIP, dblSiteIPTo) == true)
  94 + {
  95 + boolReturn = true;
  96 + }
  97 + }
  98 + else if (dblSiteIP > 0)
  99 + {
  100 + if (dblSiteIP == dblIPToValidate)
  101 + boolReturn = true;
  102 + }
  103 + else if (dblSiteIPTo > 0)
  104 + {
  105 + if (dblSiteIPTo == dblIPToValidate)
  106 + boolReturn = true;
  107 + }
  108 + }
  109 +
  110 + return boolReturn;
  111 + }
  112 + catch (Exception objExp)
  113 + {
  114 + return false;
  115 + }
  116 + }
  117 +
  118 + public static String FormatURLToIP(String strURL)
  119 + {
  120 + strURL = strURL.Replace("www.", "");
  121 + strURL = strURL.Replace("http://", "");
  122 + strURL = strURL.Replace("https://", "");
  123 + strURL = strURL.Replace("/", "");
  124 +
  125 + if (strURL.IndexOf(":") != -1)
  126 + {
  127 + char[] delimiters = new char[] { ':' };
  128 + string[] parts = strURL.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);
  129 + strURL = parts[0];
  130 + }
  131 +
  132 + return strURL;
  133 + }
  134 +
  135 + /// <summary>
  136 + ///
  137 + /// </summary>
  138 + /// <param name="iNum"></param>
  139 + /// <param name="iFrom"></param>
  140 + /// <param name="iTo"></param>
  141 + /// <returns></returns>
  142 + private static bool isBetween(Double iNum, Double iFrom, Double iTo)
  143 + {
  144 + if (iNum == 0)
  145 + return false;
  146 +
  147 + if (iNum >= iFrom && iNum <= iTo)
  148 + {
  149 + return true;
  150 + }
  151 + return false;
  152 + }
  153 +
  154 + /// <summary>
  155 + ///
  156 + /// </summary>
  157 + /// <param name="text"></param>
  158 + /// <returns></returns>
  159 + public static bool IsNumericIP(string text)
  160 + {
  161 + //Regex objRegex = new Regex(@"^[-+]?[0-9]*\.?[0-9]+$");
  162 + Regex objRegex = new Regex(@"^[-+]?[0-9]*\.?[0-9]+$*\.?[0-9]+$*\.?[0-9]+$*\.?[0-9]+$");
  163 +
  164 + return objRegex.IsMatch(text);
  165 + }
  166 + }
  167 +}
0 168 \ 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/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
... ... @@ -354,5 +356,226 @@ namespace AIAHTML5.API.Models
354 356  
355 357 return isUserBlocked;
356 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
  380 + {
  381 + arrHostIP.SetValue(IPAddress.Parse(remoteIpAddress), 0);
  382 + arrHostIP.SetValue(IPAddress.Parse(strLicenseSiteIP), 1);
  383 + }
  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 int ValidateSiteLogin( String strSiteIP, String strAcccountNumber,String strUrlReferer,string strEdition,int intSiteId ) {
  439 + Int32 intUserId = 0;
  440 + bool isExpired ;
  441 + try {
  442 + Int16 intErrorID = ErrorHelper.E_NO_ERROR;
  443 + String strStatus = AIAConstants.STATUS_OK;
  444 +
  445 + int intLicenseId = 0;
  446 + int intEditionId = Convert.ToInt16(strEdition);
  447 +
  448 + DateTime dtLogDate = DateTime.Now;
  449 + //strSiteIP = (String)objRequest.GetData(AIAConstants.SITE_IP);
  450 + //strAcccountNumber = (String)objRequest.GetData(AIAConstants.ACCOUNT_NUMBER);
  451 + //intEditionId = Convert.ToInt16(objRequest.GetData(AIAConstants.EDITION_ID));
  452 + //strUrlReferer = (String)objRequest.GetData(AIAConstants.URL_REFERER);
  453 + //strEdition = (String)objRequest.GetData(AIAConstants.EDITION_ID);
  454 + //intSiteId = (Int32)objRequest.GetData(AIAConstants.SITE_ID);
  455 + //AdminDAL.AdminDal.GetLicenseBySiteIdDataTable dtLicense = new ADAM.AIA50.AdminDAL.AdminDal.GetLicenseBySiteIdDataTable();
  456 + if (string.IsNullOrEmpty(strAcccountNumber)) {
  457 + //----logAuthenticationTryForAccountNumber(strAcccountNumber, dtLogDate, ErrorHelper.ACCOUNT_NUMBER_NOT_NULL, strSiteIP, strEdition, strUrlReferer);
  458 + intErrorID = ErrorHelper.E_ACCOUNT_NUMBER_NOT_NULL;
  459 + strStatus = AIAConstants.STATUS_NOT_OK;
  460 + } else if (string.IsNullOrEmpty(strEdition)) {
  461 + strEdition = "0";
  462 + //----logAuthenticationTryForAccountNumber(strAcccountNumber, dtLogDate, ErrorHelper.EDITION_ID_NOT_NULL, strSiteIP, strEdition, strUrlReferer);
  463 + intErrorID = ErrorHelper.E_EDITION_ID_NOT_NULL;
  464 + strStatus = AIAConstants.STATUS_NOT_OK;
  465 + }
  466 + else {
  467 + DBModel objDBModel = new DBModel();
  468 + DataTable dtLicense = objDBModel.GetLicenseBySiteId(intSiteId);
  469 + if (dtLicense.Rows.Count > 0) {
  470 + foreach (DataRow licRow in dtLicense.Rows)
  471 + {
  472 +
  473 + //isExpired = LicenseHelper.IsLicenseExpired(licRow["Id"]);
  474 + User userInfo = new User();
  475 + userInfo.LicenseInfo = AIAHTML5.API.Models.Users.getLicenseDetails(Convert.ToInt32(licRow["Id"]));
  476 +
  477 + if (userInfo.LicenseInfo != null)
  478 + {
  479 + //05.3 get licenseSubscription details
  480 + userInfo.LicenseSubscriptions = AIAHTML5.API.Models.Users.getLicenseSubscriptionDetails(userInfo.LicenseId);
  481 +
  482 + //05.4 check the License expiration irespective of either user is active or not because on AIA
  483 + //we shows the License expiration message for inactive users too
  484 +
  485 +
  486 + if (userInfo.LicenseSubscriptions != null)
  487 + {
  488 + DateTime? subscriptionValidThrough = userInfo.LicenseSubscriptions.SubscriptionValidThrough;
  489 + if (subscriptionValidThrough != null && subscriptionValidThrough.Value.Date >= DateTime.Now.Date)
  490 + {
  491 + isExpired = false;
  492 + }
  493 + else
  494 + {
  495 + isExpired = true;
  496 + }
  497 + }
  498 +
  499 +
  500 +
  501 + if (!isExpired && Convert.ToBoolean(licRow["IsActive"]) == true) {
  502 + User objUserContext = new User();
  503 + objUserContext.Id = 0;
  504 + objUserContext.FirstName = licRow["LicenseeFirstName"].ToString();
  505 + objUserContext.LastName = licRow["LicenseeLastName"].ToString();
  506 + objUserContext.UserTypeId = AIAConstants.SITE_USER;
  507 + if (licRow["EmailId"].ToString()!= null)
  508 + {
  509 + objUserContext.EmailId = licRow["EmailId"].ToString();
  510 + } else {
  511 + objUserContext.EmailId = null;
  512 + }
  513 + objUserContext.AccountNumber = strAcccountNumber;
  514 + objUserContext.EditionId = (Byte)intEditionId;
  515 + objUserContext.LicenseTypeId = (byte)licRow["LicenseTypeId"];
  516 + objUserContext.LicenseId = Convert.ToInt32(licRow["Id"]);
  517 + objUserContext.LoginId = "";
  518 + objUserContext.Modesty =(bool)licRow["IsModesty"];
  519 + //Retreive ModestyMode
  520 + objUserContext.ModestyMode = false;
  521 +
  522 + intLicenseId = Convert.ToInt32(licRow["Id"]);
  523 +
  524 +
  525 + DataTable dtblEditionForModesty = new DBModel().GetEditionsForModesty(objUserContext.LicenseId, 0);
  526 + //This table result set should return always have 0 or 1 record if modesty mode is present.
  527 + foreach (DataRow drEditionForModesty in dtblEditionForModesty.Rows) {
  528 + if ((bool)drEditionForModesty["IsModesty"]) {
  529 + objUserContext.Modesty = true;
  530 + objUserContext.ModestyMode = true;
  531 + }
  532 + }
  533 +
  534 + // get edition features details
  535 + objUserContext.objEditionFeatures = objDBModel.GetEditionFeatures((Byte)intEditionId);
  536 +
  537 +
  538 +
  539 + if (intLicenseId > 0)
  540 + objUserContext.Modules = getModuleListByLicenseId(intLicenseId);
  541 + else
  542 + objUserContext.Modules = getAllModulesList();
  543 +
  544 + objResponse.AddData(LoginConst.USER_CONTEXT, objUserContext);
  545 + SessionManager.GetInstance().AddSession((int)0, (int)objLicenseRow.Id, (byte)intEditionId);
  546 +
  547 +
  548 + //SessionManager.GetInstance().AddSession(userRow.Id, int.Parse(accountTransactInfo.licenseId), byte.Parse(accountTransactInfo.licenseEditionId));
  549 + //accountTransactInfo.licenseId = Convert.ToInt32(objLicEdition[LoginConst.LICENSE_ID]).ToString();
  550 + Hashtable arrModuleList = LicenseHelper.GetInstance().GetAllModuleByLicenseId(objLicenseRow.Id);
  551 + if (arrModuleList[9].Equals(true)) {
  552 + SessionManager.GetInstance().AddModSession("ModuleNameIP10", "IP10");
  553 + }
  554 +
  555 + logAuthenticationTryForAccountNumber(strAcccountNumber, dtLogDate, 0, strSiteIP, strEdition, strUrlReferer);
  556 + } else {
  557 + logAuthenticationTryForAccountNumber(strAcccountNumber, dtLogDate, ErrorHelper.LICENSE_INACTIVE, strSiteIP, Convert.ToString(intEditionId), strUrlReferer);
  558 + intErrorID = ErrorHelper.E_LICENCE_IS_INACTIVE;
  559 + strStatus = GlobalConstant.STATUS_NOT_OK;
  560 + }
  561 + } else {
  562 + //intErrorID = ErrorDescription(strAcccountNumber, (byte)intEditionId, strSiteIP, strUrlReferer);
  563 + //strStatus = GlobalConstant.STATUS_NOT_OK;
  564 +
  565 + intErrorID = ErrorHelper.E_EDITION_NOT_LINKED_WITH_SITE;
  566 + strStatus = GlobalConstant.STATUS_NOT_OK;
  567 + }
  568 + }
  569 + objResponse.ErrorCode = intErrorID;
  570 + objResponse.Status = strStatus;
  571 + objResponse.ErrorDesc = ErrorHelper.GetInstance().GetErrorDescriptionHelper(intErrorID).ToString();
  572 + } catch (Exception objExp) {
  573 + objResponse.Status = GlobalConstant.STATUS_NOT_OK;
  574 + objResponse.ErrorCode = GlobalConstant.RUN_TIME_EXCEPTION;
  575 + objResponse.strErrorDesc = objExp.Message;
  576 + }
  577 + if (isExpired != null && (bool)isExpired["result"])
  578 + objResponse.strErrorDesc = objResponse.strErrorDesc.Replace("{0}", (string)isExpired["date"]);
  579 + return intUserId;
357 580 }
358 581 }
359 582 \ 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/HomeController.js
... ... @@ -92,6 +92,15 @@ 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 + }
95 104 $rootScope.userData;
96 105 $rootScope.userModules;
97 106 $rootScope.passwordMismatchMessage;
... ... @@ -123,7 +132,12 @@ function ($rootScope, $scope, Modules, $log, $location, $timeout, DataService, A
123 132  
124 133  
125 134 $rootScope.initializeAIA = function () {
126   -
  135 + if (urlParams != null && urlParams != undefined) {
  136 +
  137 + $scope.ValidateClientSiteUrl();
  138 + }
  139 +
  140 +
127 141 if (navigator.cookieEnabled) {
128 142  
129 143 $rootScope.isLoading = false;
... ... @@ -381,6 +395,28 @@ function ($rootScope, $scope, Modules, $log, $location, $timeout, DataService, A
381 395  
382 396 }
383 397  
  398 +
  399 + $scope.ValidateClientSiteUrl = function () {
  400 + urlParams = strIPAddress + "&" + strAccountNumber + "&" + strEdition + "&" + (strSiteReferer != "" && strSiteReferer != null ? strSiteReferer : "");
  401 +
  402 + var siteInfo = urlParams.split('&');
  403 + $rootScope.siteUrlInfo.siteIP = siteInfo[0];
  404 + $rootScope.siteUrlInfo.remoteIPAddress = siteInfo[1];
  405 + $rootScope.siteUrlInfo.accountNumber = siteInfo[2];
  406 + $rootScope.siteUrlInfo.edition = siteInfo[3];
  407 + $rootScope.siteUrlInfo.urlReferer = siteInfo[4];
  408 +
  409 + AuthenticationService.validateClientSite($rootScope.siteUrlInfo)
  410 + .then(
  411 +
  412 + function (result) {
  413 +
  414 + },
  415 + function (error) { }
  416 + )
  417 + }
  418 +
  419 +
384 420 $scope.saveRemeberMeDetails = function (result, userInfo) {
385 421  
386 422 localStorage.setItem('RememberMeLoginId', result.LoginId);
... ...
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/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> var params = "<%=urlParams%>"; alert(params) </script>
  167 +
  168 +</head>
  169 +<body ng-controller="HomeController" id="bo" ng-init="initializeAIA()" ng-keydown="CheckRefresh($event)">
  170 + <div ng-hide="isVisibleResetPass">
  171 + <div id="login" ng-show="isVisibleLogin">
  172 +
  173 + <div class="container-fluid loginBg">
  174 + <div class="row">
  175 + <div class="col-xs-12 text-center">
  176 + <a href="index.html" class="loginLogo"><img src="content/images/common/logo-large.png" class="img-responsive" alt=""></a>
  177 + <div class="headerBand row">
  178 + <div class="col-xs-12">
  179 + <h1>A.D.A.M. Interactive Anatomy</h1>
  180 + <p>The most comprehensive online interactive anatomy learning resource</p>
  181 + </div>
  182 + </div>
  183 + </div>
  184 + <!--LOGIN PANEL-->
  185 + <div class="col-xs-12 loginPanel">
  186 + <div class="loginBox clearfix">
  187 + <div class="col-xs-12">
  188 + <!--<strong>Login</strong>-->
  189 + <form>
  190 + <div class="form-group">
  191 + <!--<label for="">User ID</label>-->
  192 + <!--input type="email" class="form-control" placeholder="User ID">
  193 + <span class="help-block text-right small"><a href="#" class="color-white">Forgot User ID?</a></span>-->
  194 +
  195 +
  196 + <div class="input-group">
  197 + <span class="input-group-addon"><i class="fa fa-user"></i></span>
  198 + <input type="text" class="form-control" placeholder="Username" ng-model="userInfo.username">
  199 + </div>
  200 + <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>
  201 +
  202 +
  203 + </div>
  204 + <div class="form-group">
  205 + <!--<label for="">Password</label>-->
  206 + <!--<input type="password" class="form-control" placeholder="Password">
  207 + <span class="help-block text-right small "><a href="#" class="color-white">Forgot Password?</a></span>-->
  208 + <div class="input-group">
  209 + <span class="input-group-addon"><i class="fa fa-key"></i></span>
  210 + <input type="password" id="UserPassword" class="form-control" placeholder="Password" ng-model="userInfo.password">
  211 + </div>
  212 + <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"-->
  213 + <div class="checkbox">
  214 + <label style="font-size: 85%;color:#fff !important;"><input type="checkbox" ng-model="userInfo.rememberChk" ng-click="RememberMe(this.userInfo.rememberChk)">Remember me</label>
  215 + </div>
  216 + </div>
  217 + <div class="form-group">
  218 + <button class="btn btn-primary pull-right" ng-click="AuthenticateUser(userInfo)">Log In</button>
  219 + </div>
  220 + </form>
  221 + </div>
  222 + </div>
  223 + <div class="loginExBtn">
  224 + <a href="https://store.adameducation.com/" target="_blank" class="btn btn-primary">Subscribe Now</a>
  225 + <a href="http://adameducation.com/aiaonline" target="_blank" class="btn btn-primary pull-right">Learn More</a>
  226 + </div>
  227 + </div>
  228 + </div>
  229 + </div>
  230 +
  231 + <!-- Footer -->
  232 + <footer class="dark">
  233 + <div class="container-fluid text-center">
  234 + <img class="browserIcons" src="content/images/common/chrome-icon.png" />
  235 + <img class="browserIcons" src="content/images/common/ie-icon.png" />
  236 + <img class="browserIcons" src="content/images/common/mozilla-icon.png" />
  237 + <img class="browserIcons" src="content/images/common/safari-icon.png" />
  238 + </div>
  239 + <div class="container-fluid text-center">Copyright &copy; {{current_year}} Ebix Inc. All rights reserved.</div>
  240 + </footer>
  241 + </div>
  242 + <!-- Forgot User ID (Small modal) -->
  243 + <div class="modal fade" id="forgotUserModal" role="dialog" tabindex="-1" aria-labelledby="exampleModalLabel" data-target=".forgot-sm">
  244 + <div class="modal-dialog modal-small" role="document">
  245 + <div class="modal-content">
  246 + <div class="modal-header">
  247 + <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
  248 + <h5 class="modal-title" id="exampleModalLabel">Enter your email id to recover User id</h5>
  249 + </div>
  250 + <div class="modal-body">
  251 + <form id="forgetUSerIdForm">
  252 + <div class="form-group">
  253 + <div class="input-group">
  254 + <span class="input-group-addon"><i class="fa fa-envelope"></i></span>
  255 + <input id="btnEmail" class="form-control" placeholder="Email" type="email" ng-model="userInfo.emailId">
  256 + </div>
  257 + </div>
  258 + </form>
  259 + </div>
  260 + <div class="modal-footer" style="padding-bottom:10px;">
  261 + <button type="button" class="btn btn-primary btn-block" ng-click="SendMailToUser(userInfo, false)">Send Mail</button>
  262 + </div>
  263 + <!--<div style="color: maroon; font-weight: bold; " ng-if="message">{{message}}</div>-->
  264 + </div>
  265 + </div>
  266 + </div>
  267 + <!-- Forgot Password (Small modal) -->
  268 + <div class="modal fade" id="forgotPwdModal" role="dialog" tabindex="-1" aria-labelledby="exampleModalLabel" data-target=".forgot-sm1">
  269 + <div class="modal-dialog modal-small" role="document">
  270 + <div class="modal-content">
  271 + <div class="modal-header">
  272 + <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
  273 + <h5 class="modal-title" id="exampleModalLabel">Enter your email id to unblock/ recover Password</h5>
  274 + </div>
  275 + <div class="modal-body" style="padding: 15px;">
  276 + <form id="forgetPwdForm" class="ng-pristine ng-valid ng-valid-email">
  277 + <div class="form-group">
  278 + <div class="">
  279 + <label class="radio-inline">
  280 + <input name="inlineRadioOptions" id="inlineRadio1" value="unblock" type="radio"> Unblock
  281 + </label>
  282 + <label class="radio-inline">
  283 + <input name="inlineRadioOptions" id="inlineRadio2" value="forgotpwd" type="radio"> Forgot Password
  284 + </label>
  285 + </div>
  286 + </div>
  287 +
  288 +
  289 + <div class="form-group">
  290 + <div class="input-group" style="margin-top: 8px;">
  291 + <span class="input-group-addon"><i class="fa fa-envelope"></i></span>
  292 + <input id="btnEmail2" class="form-control ng-pristine ng-untouched ng-valid ng-valid-email" placeholder="Email" ng-model="userInfo.emailId" type="email">
  293 + </div>
  294 + </div>
  295 + </form>
  296 + </div>
  297 + <div class="modal-footer modal-footer-forgot-password" style="padding-bottom:10px;">
  298 + <button type="button" class="btn btn-primary btn-block" ng-click="SendMailToUser(userInfo, true)">Send Mail</button>
  299 + </div>
  300 + <!--<div style="color: maroon; font-weight: bold; " ng-if="message">{{message}}</div>-->
  301 + </div>
  302 + </div>
  303 + </div>
  304 + <div id="index" ng-hide="isVisibleLogin">
  305 + <div class="container-fluid ">
  306 + <!--Header-->
  307 +
  308 + <nav class="navbar navbar-inverse navbar-fixed-top">
  309 + <div class="container-fluid">
  310 + <!-- Brand and toggle get grouped for better mobile display -->
  311 + <div class="navbar-header">
  312 + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#topFixedNavbar1" aria-expanded="false">
  313 + <span class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span>
  314 + </button>
  315 + <a class="frameLogo navbar-brand"><img src="content/images/logo-main.png" class="img-responsive" alt=""></a>
  316 + </div>
  317 + <div ng-include="'app/widget/TopMenu.html'"></div>
  318 + </div>
  319 + </nav>
  320 + <div class="bodyWrap row container-fluid">
  321 +
  322 + <div id="spinner" class="spinner" ng-show="isLoading" style="visibility:hidden">
  323 + <img id="img-spinner" src="content/images/common/loading.gif" alt="Loading" />
  324 + </div>
  325 + <div ng-view></div>
  326 +
  327 + </div>
  328 + </div>
  329 +
  330 +
  331 +
  332 + <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">
  333 + <div class="modal-dialog" role="document" style="width:400px;">
  334 + <div class="modal-content" style="width:100%;max-width:400px;">
  335 + <div class="modal-header setting-modal-header" style="padding: 5px 10px; border-bottom: 1px solid #e5e5e5;">
  336 + <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  337 + <h4 class="modal-title" id="myModalLabel">Setting</h4>
  338 + </div>
  339 + <div class="modal-body">
  340 + <div class="row" style="padding-top:20px;">
  341 + <div class="col-sm-12">
  342 +
  343 + <div aria-label="..." role="group" class="btn-group btn-group-justified">
  344 + <div role="group" class="btn-group">
  345 + <button class="btn btn-sm btn-success" type="button" ng-click="tab = 1">Appearance</button>
  346 + </div>
  347 + <div role="group" class="btn-group">
  348 + <button class="btn btn-sm btn-success" type="button" ng-click="tab = 2">Lexicons</button>
  349 + </div>
  350 + <div role="group" class="btn-group">
  351 + <button class="btn btn-sm btn-success" type="button" ng-click="tab = 3">Dissectible</button>
  352 + </div>
  353 + </div>
  354 +
  355 + </div>
  356 +
  357 +
  358 + <div class="col-sm-12" ng-show="tab === 1">
  359 +
  360 +
  361 + <div class="row">
  362 + <div class="center-block col-md-11" style="float: none; background-color:#E2E2E2;height:300px;">
  363 + <div class="row" style="padding-top: 22px;">
  364 + <div class="center-block col-md-10" style="float: none; ">
  365 + <h5><strong>System Font</strong></h5>
  366 +
  367 + <div style="border:2px solid #ACACAC;float:left;padding:15px;background-color:#CCCCCC;">
  368 + <div class="col-md-3" style="padding-left:0px;">
  369 + Sample
  370 + </div>
  371 + <div class="col-md-6" style="padding-right:0px;">
  372 + <input type="text" value="" style="width:85%;">
  373 + </div>
  374 + <div class="col-md-3" style="padding-left:0px;">
  375 + <button class="btn btn-primary" style="margin-bottom:5px;">Change</button>
  376 + <button class="btn btn-primary" style="margin-bottom:5px;">Default</button>
  377 + </div>
  378 +
  379 + </div>
  380 + </div>
  381 + </div>
  382 +
  383 + </div>
  384 + </div>
  385 +
  386 + </div>
  387 + <div class="col-sm-12" ng-show="tab === 2">
  388 +
  389 +
  390 + <div class="row">
  391 + <div class="center-block col-md-11" style="float: none; background-color:#E2E2E2;height:300px;">
  392 + <div class="col-md-6">
  393 + <h6><strong>Primary Lexicon</strong></h6>
  394 + <input type="text" value="English" style="width:90%;">
  395 + <button class="btn btn-primary" style="float:right;margin-bottom:5px;margin-top:5px;">Change</button>
  396 + <h6>Secondry Lexicon</h6>
  397 + <textarea style="width:90%;"></textarea>
  398 + <button>Change</button>
  399 + <button>Change</button>
  400 + </div>
  401 + <div class="col-md-6">
  402 + <h6>Available Lexicon</h6>
  403 + <select multiple class="form-control" id="sel2">
  404 + <option>1</option>
  405 + <option>2</option>
  406 + <option>3</option>
  407 + <option>4</option>
  408 + <option>5</option>
  409 + </select>
  410 +
  411 + <p>Note: Some languages require special system fonts to display correctly</p>
  412 + </div>
  413 +
  414 + </div>
  415 + </div>
  416 +
  417 + </div>
  418 + <div class="col-sm-12" ng-show="tab === 3">
  419 +
  420 + <div class="row">
  421 + <div class="center-block col-md-11" style="float: none; background-color:#E2E2E2;height:300px;">
  422 + <h6>Skin Tones</h6>
  423 + <div class="center-block col-md-8" style="float: none;">
  424 + <div class="col-md-6">
  425 + <img class="img-responsive" alt="" src="http://placehold.it/400x300">
  426 + </div>
  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 +
  437 + </div>
  438 + <h6>Modesty Setting</h6>
  439 + <div class="col-md-6">
  440 + <div class="col-md-4">
  441 + <img class="img-responsive" alt="" src="http://placehold.it/400x300">
  442 + </div>
  443 + <div class="col-md-8">
  444 +
  445 + <div class="radio">
  446 + <label><input type="radio" name="optradio" checked>On</label>
  447 + </div>
  448 + <div class="radio">
  449 + <label><input type="radio" name="optradio">Off</label>
  450 + </div>
  451 +
  452 + </div>
  453 + </div>
  454 + <div class="col-md-6">
  455 + <h6>Annotaion</h6>
  456 + <div class="checkbox">
  457 + <label><input type="checkbox" value="" checked>Erase Annotations when changeing layers</label>
  458 + </div>
  459 + </div>
  460 + </div>
  461 +
  462 + </div>
  463 +
  464 +
  465 +
  466 + </div>
  467 + </div>
  468 + <div class="modal-footer">
  469 + <button type="button" class="btn btn-primary">Ok</button>
  470 + <button type="button" class="btn btn-primary" data-dismiss="modal">Cancle</button>
  471 + <button type="button" class="btn btn-primary">Apply</button>
  472 + </div>
  473 + </div>
  474 + </div>
  475 + </div>
  476 + </div>
  477 +
  478 + <!--Settings modal-->
  479 + <!--<div id="modal-settings" style="z-index: 1000000000; background: white;width: 302px;position:absolute;left:40%;right:0;top:70px;">-->
  480 + <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>
  481 + <div id="modal-settings" style="display:none;z-index: 1000000000;height:auto;width: 300px;position:absolute;left:40%;right:0;top:70px;">
  482 + <div role="document">
  483 + <form>
  484 + <div ng-init="loadsettings()" class="modal-content" id="setting-modal-dark">
  485 + <div class="modal-header annotation-modal-header">
  486 + <button type="button" class="close" data-dismiss="modal" ng-click="CloseSetting()" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  487 + <h4 class="modal-title" id="myModalLabel2">Settings</h4>
  488 + </div>
  489 + <div class="modal-body">
  490 + <div class="paddTop15">
  491 + <!-- Nav tabs -->
  492 + <ul class="nav nav-tabs" role="tablist">
  493 + <li role="presentation" ng-class="{'active':SettingsTab==1}"><a role="tab" class="padd5" ng-click="SetSettingActiveTab(1)">Appearance</a></li>
  494 + <li role="presentation" ng-class="{'active':SettingsTab==2}"><a role="tab" class="padd5" ng-click="SetSettingActiveTab(2);lexiconData()">Lexicons</a></li>
  495 + <li role="presentation" ng-class="{'active':SettingsTab==3}"><a role="tab" class="padd5" ng-click="SetSettingActiveTab(3)">Dissectible</a></li>
  496 +
  497 + </ul>
  498 + <!-- Tab panes -->
  499 + <div class="tab-content">
  500 + <div role="tabpanel" ng-class="{'tab-pane active' : SettingsTab === 1,'tab-pane' : SettingsTab !==1 }" id="appearance">
  501 + <div class="row">
  502 + <div class="col-sm-12">
  503 + <div class="well well-sm no-margin-btm">
  504 + <h5>System Font</h5>
  505 + <div class="form-group">
  506 + <label for="SystemFont" class="font13">Sample</label>
  507 + <input type="text" class="form-control" id="SystemFont" value="AaBbYyZz" disabled>
  508 + </div>
  509 + <button class="btn btn-success btn-sm" data-toggle="modal" data-target="#modal-change">Change</button>
  510 + <button class="btn btn-success btn-sm">Default</button>
  511 + </div>
  512 + </div>
  513 + </div>
  514 + </div>
  515 + <div role="tabpanel" ng-class="{'tab-pane active' : SettingsTab === 2,'tab-pane' : SettingsTab !==2 }" id="lexicons">
  516 + <div class="row paddingTopBtm10">
  517 + <div class="col-sm-6">
  518 + <div class="form-group">
  519 + <label for="SystemFont" class="font13">Primary Lexicon</label>
  520 + <input type="text" id="primarylaxican" class="form-control" value="English" name="1" disabled>
  521 + <button class="btn btn-sm btn-success btn-block marginTop5" id="laxicanlanguageChagne" disabled>Change</button>
  522 + </div>
  523 +
  524 + <div class="form-group">
  525 + <label for="SystemFont" class="font13">Secondary Lexicons</label>
  526 + <!--<textarea class="form-control" rows="3">-->
  527 + <select class="form-control" size="5" id="secondLax"></select>
  528 + <!--</textarea>-->
  529 + </div>
  530 + <div class="form-group">
  531 + <button class="btn btn-sm btn-success" id="laxiconLangAdd" disabled>Add</button>
  532 + <button class="btn btn-sm btn-success" id="laxiconLangRemove">Remove</button>
  533 + </div>
  534 + </div>
  535 + <div class="col-sm-6" style="padding-left:13px;padding-right:13px;">
  536 + <div class=" form-group">
  537 + <label for="SystemFont" class="font13">Available Lexicons</label>
  538 + <select class="form-control" size="8" id="lexiconLangDropdown"></select>
  539 + </div>
  540 + <p class="font11"><strong>Note :</strong> Some languages require special system fonts to display correctly</p>
  541 + </div>
  542 + <div class="clearfix"></div>
  543 + </div>
  544 + </div>
  545 + <div role="tabpanel" id="dissectible" ng-class="{'tab-pane active' : SettingsTab === 3,'tab-pane' : SettingsTab !==3 }">
  546 + <div class="">
  547 + <div class="col-sm-12">
  548 + <h5 class="bolder font13 no-margin-top">Skin Tones</h5>
  549 + <div class="skin-tones">
  550 + <div align="center">
  551 + <div class="col-sm-5">
  552 + <button id="btnEthnicW" class="thumbnail skinmarginbtm6" ng-model="formsetting.ethnicity" ng-click="ChangeEthnicity(formsetting,'W')">
  553 + <img src="~/../content/images/common/skin1.jpg" alt="">
  554 + </button>
  555 + </div>
  556 + <div class="col-sm-5">
  557 + <button id="btnEthnicB" class="thumbnail skinmarginbtm6" ng-model="formsetting.ethnicity" ng-click="ChangeEthnicity(formsetting,'B')">
  558 + <img src="~/../content/images/common/skin2.jpg" alt="">
  559 + </button>
  560 + </div>
  561 + <div class="col-sm-5">
  562 + <button id="btnEthnicL" class="thumbnail skinmarginbtm6" ng-model="formsetting.ethnicity" ng-click="ChangeEthnicity(formsetting,'A')">
  563 + <img src="~/../content/images/common/skin3.jpg" alt="">
  564 + </button>
  565 + </div>
  566 + <div class="col-sm-5">
  567 + <button id="btnEthnicA" class="thumbnail skinmarginbtm6" ng-model="formsetting.ethnicity" ng-click="ChangeEthnicity(formsetting,'L')">
  568 + <img src="~/../content/images/common/skin4.jpg" alt="">
  569 + </button>
  570 + </div>
  571 + </div>
  572 + </div>
  573 +
  574 + </div>
  575 + </div>
  576 + <div class="">
  577 + <div class="col-sm-6">
  578 + <h5 class="font13 bolder">Modesty Settings</h5>
  579 + <img src="~/../content/images/common/adam-leaf.png" alt="" class="pull-left marginR5">
  580 + <div class="radio">
  581 + <label>
  582 + <input type="radio" ng-checked="isModestyOn" ng-model="formsetting.modesty" value="Y" name="modestyRadios" id="modon" ng-click="ChangeModesty(formsetting,'Y')">
  583 + <span class="">On</span>
  584 + </label>
  585 + </div>
  586 + <div class="radio">
  587 + <label>
  588 + <input type="radio" ng-checked="isModestyOff" ng-model="formsetting.modesty" value="N" name="modestyRadios" id="modoff" ng-click="ChangeModesty(formsetting,'N')">
  589 + <span class="">Off</span>
  590 + </label>
  591 + </div>
  592 + </div>
  593 + <div class="col-sm-6">
  594 + <h5 class="font13 bolder">Annotation</h5>
  595 + <div class="checkbox no-margin">
  596 + <!--Settings > The entire highlighted part should be active-->
  597 + <label class="font11 no-margin-btm">
  598 + <input type="checkbox" value="" checked>
  599 + Erase Annotations when changing layers
  600 + </label>
  601 + </div>
  602 + </div>
  603 + </div>
  604 + </div>
  605 + </div>
  606 + </div>
  607 + </div>
  608 + <div class="modal-footer">
  609 + <button type="button" class="btn btn-primary" ng-click="UpdateAndCloseSetting(formsetting)">OK</button>
  610 +
  611 + <!--<button type="button" class="btn btn-primary" data-dismiss="modal">Cancel</button>-->
  612 + <button type="button" class="btn btn-primary" ng-click="CloseSetting()">Cancel</button>
  613 + <button type="button" class="btn btn-primary" ng-click="UpdateSetting(formsetting)">Apply</button>
  614 + </div>
  615 + </div>
  616 + </form>
  617 + </div>
  618 + </div>
  619 + <div id="setting-spinner" style="display:none;position: fixed; top: 50%; left: 50%; margin-left: -50px; z-index: 15000; overflow: auto; width: 100px;">
  620 + <img id="img-spinner" src="content/images/common/loading.gif" alt="Loading">
  621 + </div>
  622 + <!--Annotation Modal-->
  623 + <div class="annotationTollbar" style="width: 300px;position: fixed; top: 80px; right: 20px; display: none; z-index: 1200000;">
  624 + <div class="annotationbar">
  625 + <div class="modal-content">
  626 + <div class="modal-header annotation-modal-header">
  627 + <button type="button" class="close" aria-label="Close" ng-click="CloseAnnotationTool()"><span aria-hidden="true">&times;</span></button>
  628 + <h4 class="modal-title" id="myModalLabel">Annotation</h4>
  629 + </div>
  630 + <div class="modal-body" id="AnnotaionPopupDiv">
  631 + <div class="row">
  632 + <div class="col-sm-12">
  633 + <h5>Mode</h5>
  634 +
  635 + <div class="btn-group btn-group-justified" role="group" aria-label="...">
  636 + <div class="btn-group" role="group" tooltip>
  637 + <div id="identify-block" style="display: none; font-size:13px;">Identify Mode</div>
  638 + <button id="OnIdentify" type="button" class="btn btn-sm btn-success" ng-click="OnIdentifyClick()">Identify</button>
  639 + </div>
  640 + <div class="btn-group" role="group">
  641 + <div id="draw-block" style="display: none; font-size: 13px;">Draw Mode</div>
  642 + <button id="DrawMode" type="button" ng-click="DrawingMode()" class="btn btn-sm btn-success">Draw</button>
  643 + </div>
  644 + </div>
  645 +
  646 + </div>
  647 + <div class="col-sm-12">
  648 + <h5>Tools</h5>
  649 + <div class="well well-popup">
  650 + <div class="" aria-label="...">
  651 + <div class="" role="group" align="center">
  652 + <div id="cursor-block" style="display: none; font-size:13px;"></div>
  653 + <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>
  654 + <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>
  655 + <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>
  656 + <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>
  657 + </div>
  658 + <div class="" role="group" align="center">
  659 + <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>
  660 + <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>
  661 + <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>
  662 + <!--<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>-->
  663 + <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>
  664 + </div>
  665 + </div>
  666 + </div>
  667 + <div class="well-popup well blankshapediv" ng-mouseover="addToolTip(200, 170, 120, 'Edit Style')" ng-mouseleave="removeToolTipOnMouseOut()">
  668 + <!--#7931-->
  669 +
  670 + <div id="edit-block" style="display: none; font-size: 13px;">Edit Shape Style</div>
  671 + <div id="previewBorder" class="outlinediv" ng-mouseover="addToolTip(170, 170, 120, 'Edit Style')" ng-mouseleave="removeToolTipOnMouseOut()">
  672 + <div id="shapeStyleDiv" style="background-color: #ffffff;" class="fullcolordiv" ng-click="disableAnnotationtoolOnListManager||enableAnnotationToolBar()">
  673 +
  674 + </div>
  675 +
  676 + </div>
  677 + </div>
  678 + <div class="well well-popup">
  679 + <div class="" role="group" aria-label="...">
  680 + <div>
  681 + <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>
  682 + <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>
  683 +
  684 + <!--<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;
  685 + <div style="width: 80px; margin: 0px 0px 0px 4px; display: inline-block;float:left;">
  686 + <div style="width: 58px; float: left;" ng-mouseover="addToolTip(270, 100, 120, 'Brush Size')" ng-mouseleave="removeToolTipOnMouseOut()">
  687 + <input type="text" id="btnBrushSize" class="form-control" value="1" style="height:32px;border-radius:0;" oninput="Brushsize(this)">
  688 + </div>
  689 + <div style="width: 22px; float: left;">
  690 + <div style="width: 100%; float: left; height: 16px;">
  691 + <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;">
  692 +
  693 + <img style="width:10px;height:10px;" src="~/../content/images/DA/angle-up.png">
  694 + </button>
  695 + </div>
  696 + <div style="width: 100%; float: left; height: 16px;">
  697 + <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;">
  698 + <img style="width:10px;height:10px;" src="~/../content/images/DA/angle-down.png">
  699 + </button>
  700 + </div>
  701 + </div>
  702 +
  703 + </div>
  704 +
  705 +
  706 + <div class="pull-left pl-12" style="width:45%; margin-left:2%;margin-top:5px;">
  707 + <div id="slider-range-min-2" ng-mouseover="addToolTip(270, 170, 120, 'Brush Size')" ng-mouseleave="removeToolTipOnMouseOut()"></div>
  708 + </div>
  709 + <div class="clearfix"></div>
  710 + </div>
  711 +
  712 + </div>
  713 +
  714 +
  715 + </div>
  716 +
  717 + </div>
  718 + </div>
  719 + </div>
  720 +
  721 + </div>
  722 + </div>
  723 + </div>
  724 +
  725 + <!--Modal For Annotation Text Box-->
  726 + <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;">
  727 +
  728 + <div class="modal-content">
  729 + <div class="modal-header" style="background-color: #808D43;padding:10px;border-bottom:0;">
  730 + <!--<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>-->
  731 + <h4 class="modal-title" id="myModalLabel" style="font-weight:bold;">Enter Text to be put in a box</h4>
  732 + </div>
  733 + <div class="modal-body">
  734 + <div class="col-xs-12" style="padding:20px 0;">
  735 + <div class="form-inline">
  736 + <!--Annotation: Text in different font style is same.-->
  737 + <select class="form-control" id="selected-font-family"></select>
  738 + <select class="form-control" id="selected-font-size">
  739 + <option>14</option>
  740 + <option>16</option>
  741 + <option>18</option>
  742 + <option>20</option>
  743 + <option>22</option>
  744 + <option>24</option>
  745 + <option>26</option>
  746 + <option>28</option>
  747 + <option>36</option>
  748 + <option>48</option>
  749 + <option>72</option>
  750 + </select>
  751 + <span style="vertical-align:middle;">
  752 + <span id="text-bold" class="Edittext-btn-css">
  753 + <i aria-hidden="true" class="fa fa-bold" style="color: #fff"></i>
  754 + </span>
  755 + <span id="text-italic" class="Edittext-btn-css">
  756 + <i class="fa fa-italic" aria-hidden="true" style="color: #fff"></i>
  757 +
  758 + </span>
  759 + <span id="text-underline" class="underline-btn-css">
  760 + <i class="fa fa-underline" aria-hidden="true" style="color: #fff"></i>
  761 + </span>
  762 + </span>
  763 +
  764 + <div class="form-group" id="font-color" style="display:inline-flex;vertical-align:top;cursor:pointer;margin-right:36px;">
  765 +
  766 + <input type="text" id="saturation-demo" class="form-control demo" data-control="saturation" style="display:none;" value="#0088cc">
  767 + </div>
  768 + <div class="form-group" id="drawTextBGColorpicker" style="display:inline-flex;vertical-align:top;cursor:pointer;margin-right:36px;">
  769 + <input type="text" id="saturation-demo-background" class="form-control drawTextBG" data-control="saturation" style="display:none;" value="#0088cc">
  770 + </div>
  771 +
  772 + <span style="vertical-align:middle;">
  773 + <span id="text-left" class="Edittext-btn-css">
  774 + <i aria-hidden="true" class="fa fa-align-left" style="color: #fff"></i>
  775 + </span>
  776 + <span id="text-center" class="Edittext-btn-css">
  777 + <i class="fa fa-align-center" aria-hidden="true" style="color: #fff"></i>
  778 +
  779 +
  780 + </span>
  781 + <span id="text-right" class="underline-btn-css">
  782 + <i class="fa fa-align-right" aria-hidden="true" style="color: #fff"></i>
  783 +
  784 +
  785 + </span>
  786 + </span>
  787 +
  788 +
  789 + </div>
  790 + </div>
  791 + <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>
  792 +
  793 + <!--code for horizonatl text going out-->
  794 + <div id="atTextDiv" style="float:left;">
  795 + <span id="duptextspan" style="float: left; display: none;"></span>
  796 + <span id="textspan" style="display:none;"></span>
  797 + </div>
  798 + <!--code for horizonatl text going out-->
  799 +
  800 + </div>
  801 + <div class="modal-footer">
  802 + <!--<button type="button" class="btn btn-default" ng-click="closeModal()" data-dismiss="modal">Close</button>-->
  803 + <button type="button" class="btn btn-default" ng-click="closeModal()" id="closeEditText" data-dismiss="modal">Close</button>
  804 + <button type="button" id="saveBtn" class="btn btn-primary" data-dismiss="modal" ng-click="saveText()">Save</button>
  805 + </div>
  806 + </div>
  807 +
  808 + </div>
  809 +
  810 +
  811 +
  812 +
  813 + <!--List manager-->
  814 + <!--List manager-->
  815 + <style>
  816 + #listManager {
  817 + background: #fff;
  818 + border-radius: 3px;
  819 + border: 1px solid #ededed;
  820 + -webkit-box-shadow: 0px 0px 2px 1px rgba(173,173,173,1);
  821 + -moz-box-shadow: 0px 0px 2px 1px rgba(173,173,173,1);
  822 + box-shadow: 0px 0px 2px 1px rgba(173,173,173,1);
  823 + width: 350px;
  824 + position: absolute;
  825 + top: 170px;
  826 + left: 140px;
  827 + display: none;
  828 + z-index: 780000;
  829 + height: auto !important;
  830 + }
  831 +
  832 + #listManager .annotation-modal-header {
  833 + background: #818f44;
  834 + padding: 2px 10px;
  835 + }
  836 +
  837 + #listManager .annotation-modal-header h4 {
  838 + color: #fff;
  839 + font-size: 15px;
  840 + line-height: 20px;
  841 + }
  842 +
  843 + #listManager .modal-header .close {
  844 + color: #fff;
  845 + margin: 0;
  846 + opacity: 10;
  847 + text-shadow: none;
  848 + }
  849 +
  850 + #listManager .modal-footer {
  851 + padding: 5px 10px;
  852 + }
  853 + </style>
  854 + <div id="listManager" style="">
  855 + <div class="modal-header annotation-modal-header">
  856 + <button type="button" class="close" aria-label="Close" ng-click="CloseListManager()"><span aria-hidden="true">&times;</span></button>
  857 + <h4 class="modal-title" id="myModalLabel">List Manager</h4>
  858 + </div>
  859 + <div class="modal-body">
  860 + <div class="row paddingTopBtm10">
  861 + <div class="col-sm-12" ng-init="FillListManager()">
  862 +
  863 + <div class="form-group">
  864 + <label for="sel1">Window</label>
  865 + <select class="form-control" id="viewName" disabled>
  866 + <!--<option>Male Lateral</option>-->
  867 +
  868 + </select>
  869 + </div>
  870 + <div style="">
  871 + <div class="form-group">
  872 + <div ng-click="restrictBodySystemList()" class="btn btn-success btn-block" style="padding:3px 12px;">
  873 + <i class=" fa fa-caret-right restrict-carret-icon"></i> <span>Restrict List to</span>
  874 + </div>
  875 + </div>
  876 +
  877 + <div id="restrictListDiv" style="display:none;">
  878 + <div class="well well-sm marginTopBtm10">
  879 + <div class="form-horizontal">
  880 + <div class="form-group">
  881 + <label class="col-sm-4 control-label" for="System">System</label>
  882 + <div class="col-sm-8">
  883 + <select id="bodySystems" class="form-control" onchange="if (typeof (this.selectedIndex) != 'undefined') refreshTermListOnSystem(this.options[this.selectedIndex].id)"></select>
  884 + <select id="AABodySystems" class="form-control" onchange="if (typeof (this.selectedIndex) != 'undefined') refreshTermListOnSystemSel(this.options[this.selectedIndex].id)" style="display:none;"></select>
  885 + </div>
  886 + </div>
  887 + <div class="form-group">
  888 + <label class="col-sm-4 control-label" for="inputPassword3">Area</label>
  889 + <div class="col-sm-8">
  890 + <select class="form-control" disabled>
  891 + <option value="1" selected="">Entire View</option>
  892 + </select>
  893 + </div>
  894 + </div>
  895 + </div>
  896 + </div>
  897 +
  898 +
  899 + </div>
  900 +
  901 + <!--DA > List Manager > Multiple structure selection should not be available.-->
  902 + <div class="form-group">
  903 + <select id="termList" class="form-control" size="10" onclick="if (typeof (this.selectedIndex) != 'undefined') onListManagerTermSelection(this.options[this.selectedIndex].id, true)"></select>
  904 + </div>
  905 +
  906 + </div>
  907 + <div style="clear:both;"></div>
  908 +
  909 +
  910 +
  911 +
  912 + </div>
  913 + </div>
  914 +
  915 + </div>
  916 + <div class="modal-footer" id="totalTerms">
  917 + <!--<span class="pull-left marginTop5">424 Structures</span>-->
  918 + <!--<button data-dismiss="modal" class="btn btn-primary" type="button"><i class="fa fa-arrow-circle-right"></i></button>-->
  919 + </div>
  920 + </div>
  921 +
  922 + <!--background disable div-->
  923 +
  924 + <div id="modelbackground"></div>
  925 +
  926 +
  927 + <!--Edit Shape Modal-->
  928 +
  929 +
  930 + <div class="modeleditstyle" id="modeleditstyle" style="z-index: 1000000000; background: white;width: 302px;position:absolute;left:40%;right:0;top:70px;">
  931 + <div class="modal-content">
  932 + <div class="modal-header annotation-modal-header">
  933 + <h4 class="modal-title" id="myModalLabel33">Edit Shape Style</h4>
  934 + </div>
  935 + <form id="editStyleForm">
  936 + <div class="modal-body">
  937 + <div class="marginTopBtm10">
  938 + <div class="well well-sm no-margin-btm">
  939 + <div class="row">
  940 + <div class="col-sm-12">
  941 + <div class="checkbox no-margin">
  942 + <label>
  943 + <input id="fill-option" type="checkbox" checked onclick="enableDisableFillOption()"> Fill Option
  944 + </label>
  945 + </div>
  946 + </div>
  947 + <div class="col-sm-6 enableDisableOpacity">
  948 + <!--<div class="radio">
  949 + <label>
  950 + <input type="radio" name="filloption" id="filloption1" value="filloption1">
  951 + <span class="">Texture</span>
  952 + <img id="editstyleTexture" src="~/../content/images/common/annotation-tool-bar/pattern-picker.png" alt="" class="pattern-picker" data-toggle="modal" data-target="#pattern">
  953 + </label>
  954 + </div>-->
  955 + <div class="radio">
  956 + <label>
  957 + <input type="radio" name="filloption" id="filloption2" value="filloption2" checked style="margin-top:8px;">
  958 +
  959 +
  960 + <div id="editstylebackgroundcolor" class="form-group" style="display:inline-flex;vertical-align:top;cursor:pointer;margin-right:36px;float:left;">
  961 + <span style="font-weight: normal; float: left; padding-top: 5px; padding-right: 5px;">Color</span>
  962 + <input type="text" class="form-control outerBackgroundColor" data-control="saturation" style="display:none;" value="#0088cc">
  963 + </div>
  964 +
  965 +
  966 + </label>
  967 + </div>
  968 + </div>
  969 + <div class="col-sm-6 no-padding marginTop10 enableDisableOpacity">
  970 + <div class="row">
  971 + <label class="pull-left" style="font-weight:normal;">Scale</label>
  972 + <div id="edit-slider-3" class="pull-left pl-12" style="width:62%; margin-left:3%; margin-top:2%;">
  973 + <div id="slider-range-min-3"></div>
  974 + </div>
  975 + </div>
  976 +
  977 + <div class="row">
  978 + <label class="pull-left" style="font-weight:normal;">Opacity</label>
  979 + <div id="edit-slider-4" class="pull-left pl-12" style="width:53%; margin-left:3%; margin-top:2%;">
  980 + <div id="slider-range-min-4"></div>
  981 + </div>
  982 + </div>
  983 +
  984 + <div class="clearfix"></div>
  985 +
  986 +
  987 + </div>
  988 + </div>
  989 +
  990 + </div>
  991 + </div>
  992 + <div class="marginTopBtm10">
  993 + <div class="well well-sm no-margin-btm">
  994 + <div class="row">
  995 + <div class="col-sm-12">
  996 + <div class="checkbox no-margin">
  997 + <label>
  998 + <input id="Outline-Option" onclick="enableDisableOutline()" type="checkbox" checked> Outline Option
  999 + </label>
  1000 + </div>
  1001 + </div>
  1002 + <div class="col-sm-6 setEnableDisableForEditShapeStyle">
  1003 + <label class="marginTop5">
  1004 + <span style="font-weight: normal; float: left; padding-top: 5px; padding-right: 5px;">Color</span>
  1005 + <div class="form-group" id="outlineColor" style="display:inline-flex;vertical-align:top;cursor:pointer;margin-right:36px;float:left;">
  1006 +
  1007 + <input type="text" class="form-control borderColorCanvasPreview" data-control="saturation" style="display:none;" value="#0088cc">
  1008 + </div>
  1009 +
  1010 +
  1011 + </label>
  1012 + </div>
  1013 +
  1014 + <div class="col-sm-6 setEnableDisableForEditShapeStyle">
  1015 + <div class="form-horizontal">
  1016 + <div class="form-group">
  1017 + <label class="col-sm-3 control-label" style=" font-weight:normal; padding-top:9px;">Size</label>
  1018 + <div class="col-sm-9 marginTop5">
  1019 + <select id="borderWidthCanvasElement" class="form-control input-sm">
  1020 + <option value="1">1</option>
  1021 + <option value="2">2</option>
  1022 + <option value="3">3</option>
  1023 + <option value="4">4</option>
  1024 + <option value="5">5</option>
  1025 + </select>
  1026 + </div>
  1027 + </div>
  1028 + </div>
  1029 + </div>
  1030 +
  1031 + </div>
  1032 + </div>
  1033 + </div>
  1034 +
  1035 + <div class="marginTopBtm10">
  1036 +
  1037 + <div class="well well-sm no-margin-btm blankshapediv">
  1038 + <div class="outlinediv" id="outlinedivId" style="border: 1px solid #000000;">
  1039 + <div id="imgOpacity" style="background-color: #ffffff" class="fullcolordiv imgopacity">
  1040 + </div>
  1041 + </div>
  1042 + </div>
  1043 +
  1044 + </div>
  1045 + </div>
  1046 + <div class="modal-footer">
  1047 + <button id="btnShapeStyle" type="button" class="btn btn-primary btn-sm" ng-click="setPropertiesForShapes('imgOpacity')">
  1048 + OK
  1049 + </button>
  1050 + <button type="button" class="btn btn-primary btn-sm" data-dismiss="modal" ng-click="disableAnnotationToolBar()">Cancel</button>
  1051 + </div>
  1052 + </form>
  1053 + </div>
  1054 + </div>
  1055 +
  1056 + <!--Export Image Modal-->
  1057 + <div class="modal fade export-image ui-draggable in" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"
  1058 + style="z-index: 1200002;">
  1059 + <div class="modal-dialog modal-sm" role="document">
  1060 + <div class="modal-content">
  1061 + <div class="modal-header annotation-modal-header ui-draggable-handle">
  1062 + <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
  1063 + <h4 class="modal-title" id="">Save As</h4>
  1064 + </div>
  1065 + <div class="modal-body">
  1066 + <div class="row paddTopbtm15">
  1067 + <div class="col-sm-12">
  1068 + <div class="form-group">
  1069 + <label for="filename">Filename:</label>
  1070 + <div class="input-group">
  1071 + <input type="text" class="form-control" id="filename" placeholder="" ng-model="filename">
  1072 + <div class="input-group-addon">.jpg</div>
  1073 + </div>
  1074 + </div>
  1075 + </div>
  1076 + </div>
  1077 +
  1078 + </div>
  1079 + <div class="modal-footer">
  1080 + <div class="row">
  1081 + <input type="file" id="file1" style="display:none">
  1082 + <!--<a href="data:application/xml;charset=utf-8,your code here" download="filename.html">Save</a-->
  1083 + <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()"-->
  1084 + </div>
  1085 + </div>
  1086 +
  1087 + </div>
  1088 + </div>
  1089 + </div>
  1090 + <div class="modal fade export-image-ipad ui-draggable in" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"
  1091 + style="z-index: 1200002;">
  1092 + <div class="modal-dialog modal-sm" role="document">
  1093 + <div class="modal-content">
  1094 + <div class="modal-header annotation-modal-header ui-draggable-handle">
  1095 + <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
  1096 + <h4 class="modal-title" id="">Download Export Image</h4>
  1097 + </div>
  1098 + <div class="modal-body">
  1099 + <div class="row paddTopbtm15">
  1100 + <div class="col-sm-12">
  1101 + <div class="form-group">
  1102 + <label for="filename">Exported image open in next Teb. Please download it</label>
  1103 +
  1104 + </div>
  1105 + </div>
  1106 + </div>
  1107 +
  1108 + </div>
  1109 + <div class="modal-footer">
  1110 + <div class="row">
  1111 + <input type="file" id="file1" style="display:none">
  1112 + <!--<a href="data:application/xml;charset=utf-8,your code here" download="filename.html">Save</a-->
  1113 + <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()"-->
  1114 + </div>
  1115 + </div>
  1116 +
  1117 + </div>
  1118 + </div>
  1119 + </div>
  1120 + <!--Print Active Viewer-->
  1121 + <div class="print-box-active portrait-box-active" id="printBox" style="display: none;">
  1122 + <div id="printDivContent">
  1123 + <div class="">
  1124 + <div class="print-col-sm-4" style="top: 10px; position: absolute; left: 10px;">
  1125 + <span class="pull-left font12 print-span-font" id="spnModule"></span>
  1126 + </div>
  1127 + <div class="print-col-sm-4" style="top: 10px; position: absolute; right: 10px;">
  1128 + <span class="pull-right font12 print-span-font" id="spnBodyViewTitle"></span>
  1129 + </div>
  1130 + </div>
  1131 + <div class=" mar-top-25" align="center" id="dvPortrait" style="text-align: center;">
  1132 + <img src="" alt="" class="logo-image" id="snipImage" style="width: 100%;" />
  1133 + </div>
  1134 + <div>
  1135 + <div class="print-col-sm-4" style="position: absolute; bottom: 20px;">
  1136 + <span class="pull-left marginTop10 font12 print-span-font">Copyright {{current_year}} A.D.A.M., Inc. All Rights Reserved</span>
  1137 + </div>
  1138 + <div class="print-col-sm-4" style="position: absolute; bottom: 20px; right: 10px;">
  1139 + <span class="pull-right print-marginTop10 bgnone no-margin">
  1140 + <img class="logo-image" src="content/images/adam-logo-small.png" alt="">
  1141 + </span>
  1142 + </div>
  1143 + </div>
  1144 + <div class="clearfix"></div>
  1145 + </div>
  1146 + </div>
  1147 +
  1148 + <!--Print Preview Modal-->
  1149 + <div id="dvPrintPreview" style="display: none;"></div>
  1150 + </div>
  1151 + </div>
  1152 + <!--RESET PASSWORD FORM-->
  1153 + <div id="passwordReset" ng-show="isVisibleResetPass">
  1154 + <table width="500" border="0" align="center" cellpadding="0" cellspacing="0">
  1155 + <tbody>
  1156 + <tr>
  1157 + <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>
  1158 + </tr>
  1159 + <tr>
  1160 + <td align="center" valign="top" bgcolor="#808d43" style="padding:20px; overflow:hidden;">
  1161 + <form name="resetPasswordForm" novalidate>
  1162 + <table width="100%" border="0" cellspacing="0" cellpadding="0" ng-controller="HomeController">
  1163 + <tbody>
  1164 +
  1165 + <tr>
  1166 + <td style=" font-size:26px; font-weight:bold; color:#fff; font-family:Gotham, 'Helvetica Neue', Helvetica, Arial, sans-serif"><strong>Reset Password</strong></td>
  1167 + </tr>
  1168 + <tr>
  1169 + <td>&nbsp;</td>
  1170 + </tr>
  1171 + <tr>
  1172 + <td style="font-family:Gotham, 'Helvetica Neue', Helvetica, Arial, sans-serif; color:#fff;">New Password </td>
  1173 + </tr>
  1174 + <tr>
  1175 + <td>
  1176 + <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>
  1177 + <span style="color: maroon; font-weight:bold" ng-show="resetPasswordForm.newPassword.$touched && resetPasswordForm.newPassword.$invalid && resetPasswordForm.newPassword.$pristine">The password is required.</span>
  1178 + <p ng-show="resetPasswordForm.newPassword.$error.minlength" style="font-weight: bold; color: maroon;">Password length must be between 8 - 20 characters.</p>
  1179 + <p ng-show="resetPasswordForm.newPassword.$error.maxlength" style="font-weight: bold; color: maroon;">Password length must be between 8 - 20 characters.</p>
  1180 + </td>
  1181 + </tr>
  1182 + <tr>
  1183 + <td>&nbsp;</td>
  1184 + </tr>
  1185 + <tr>
  1186 + <td style="font-family:Gotham, 'Helvetica Neue', Helvetica, Arial, sans-serif; color:#fff;">Confirm Password </td>
  1187 + </tr>
  1188 +
  1189 + <tr>
  1190 + <td>
  1191 + <input class="form-control" name="confirmPassword" value="*****" type="password" style="padding:3px 5px; height:25px; width:98%;" ng-model="userInfo.confirmPassword" required>
  1192 + <span style="color: maroon; font-weight: bold; " ng-show="resetPasswordForm.confirmPassword.$touched && resetPasswordForm.confirmPassword.$invalid">Confirm password is required.</span>
  1193 + <span style="color: maroon; font-weight: bold; " ng-if="resetPasswordForm.newPassword !== resetPasswordForm.confirmPassword">{{passwordMismatchMessage}}</span>
  1194 + </td>
  1195 + </tr>
  1196 + <tr>
  1197 + <td>&nbsp;</td>
  1198 + </tr>
  1199 + <tr>
  1200 + <td>
  1201 + <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)"-->
  1202 + </td>
  1203 + </tr>
  1204 + </tbody>
  1205 + </table>
  1206 + </form>
  1207 + </tr>
  1208 +
  1209 +
  1210 + </tbody>
  1211 + </table>
  1212 + </div>
  1213 +
  1214 + <div class="modal fade" id="messageModal" role="dialog">
  1215 + <div class="modal-dialog">
  1216 +
  1217 + <div class="modal-content">
  1218 + <div class="modal-header">
  1219 + <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
  1220 + </div>
  1221 + <div class="modal-title"></div>
  1222 + <div class="modal-body">{{errorMessage}}</div>
  1223 + <div class="modal-footer"> <button type="button" class="btn btn-primary" data-dismiss="modal">OK</button></div>
  1224 + </div>
  1225 + </div>
  1226 + </div>
  1227 +
  1228 + <!--Admin Form (Under Process)-->
  1229 +
  1230 +
  1231 + <!--Available modules list modal after login-->
  1232 + <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; ">
  1233 + <div class="modal-dialog" role="document">
  1234 + <div class="modal-content">
  1235 + <div class="modal-header ui-draggable-handle " style="color: #ffffff; background-color: #0095da; border-color: #007ab3;cursor:default;">
  1236 + <!--color: #e5e5e5;-->
  1237 + <!--bg-primary-->
  1238 + <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
  1239 + <h4 class="text-left lhgt19 padd5" style="color:#fff; text-align:left;">Coming Soon...</h4>
  1240 + </div>
  1241 +
  1242 + <div class="modal-body">
  1243 + <div class="panel-body">
  1244 + <!-- form -->
  1245 + <form class="form-horizontal">
  1246 +
  1247 + <!--<hr style="border: 1px solid;"/>-->
  1248 + <!--<hr style="border: 1px solid;" />-->
  1249 + <div>
  1250 + <div class="form-group" id="moduleDiv7">
  1251 + <div class="col-sm-12"><i>• Curriculum Builder</i></div> <!--(To be available by 09/25/2017)-->
  1252 + </div>
  1253 + <div class="form-group" id="moduleDiv8">
  1254 + <div class="col-sm-8"><i>• Anatomy Test</i></div> <!--(To be available by 08/28/2017)-->
  1255 + </div>
  1256 + <div class="form-group" id="moduleDiv13">
  1257 + <div class="col-sm-8">• A.D.A.M Images</div>
  1258 + </div>
  1259 + </div>
  1260 + <div class="form-group">
  1261 + <div style="text-align: center">
  1262 + <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>
  1263 + </div>
  1264 + </div>
  1265 + </form>
  1266 + </div>
  1267 + </div>
  1268 +
  1269 + </div>
  1270 + </div>
  1271 + </div>
  1272 +
  1273 + <!-- Terms & Condition Modal -->
  1274 + <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; ">
  1275 + <div class="modal-dialog" role="document">
  1276 + <div class="modal-content">
  1277 + <div class="modal-header ui-draggable-handle " style="color: #ffffff; background-color: #0095da; border-color: #007ab3;cursor:default;">
  1278 + <!--color: #e5e5e5;-->
  1279 + <h6 class="text-left lhgt19 padd5" style="color:#fff; text-align:left;">Terms and Conditions</h6>
  1280 + </div>
  1281 +
  1282 + <div class="modal-body" style="width: 597px; height: 400px; overflow-x: auto;">
  1283 + <div class="panel-body">
  1284 + <div id="dvTerms" style="font-size: 13px;"></div>
  1285 + </div>
  1286 + </div>
  1287 + <div class="modal-footer ui-draggable-handle " style="color: #ffffff; cursor:default;">
  1288 + <!--background-color: #0095da; border-color: #007ab3;-->
  1289 + <!-- form -->
  1290 + <form class="form-horizontal">
  1291 + <!--<div class="form-group">-->
  1292 + <div style="clear: left; float: left; color: #000;"><input type="checkbox" id="chkAccept" ng-model="checked" style="vertical-align: top;" /> I accept</div>
  1293 + <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>
  1294 + <!--</div>-->
  1295 + </form>
  1296 + </div>
  1297 + </div>
  1298 + </div>
  1299 + </div>
  1300 + <script>
  1301 + function enableDisableFillOption() {
  1302 + if (document.getElementById('fill-option').checked) {
  1303 + // $('#imgOpacity').attr("background-color");
  1304 + //$('#imgOpacity').css({"background-color"})
  1305 + //$("#filloption1").css({ "pointer-events": "auto" });
  1306 + //$("#filloption12").css({ "pointer-events": "auto" });
  1307 +
  1308 + var x = $("#editstylebackgroundcolor span.minicolors-swatch-color").css('background-color');
  1309 + $("#imgOpacity").css("background-color", x);
  1310 + $("#edit-slider-3").css({ "pointer-events": "auto" });
  1311 + $("#edit-slider-4").css({ "pointer-events": "auto" });
  1312 + $("#editstylebackgroundcolor").css({ "pointer-events": "auto" });
  1313 + $("#editstyleTexture").css({ "pointer-events": "auto" });
  1314 + $(".enableDisableOpacity label").css({ "cursor": "pointer" });
  1315 + $(".enableDisableOpacity").css({ "opacity": "1" })
  1316 + document.getElementById("filloption1").disabled = false;
  1317 + document.getElementById("filloption2").disabled = false;
  1318 + document.getElementById("filloption1").style.cursor = "default";
  1319 + document.getElementById("filloption2").style.cursor = "default";
  1320 +
  1321 +
  1322 +
  1323 + }
  1324 + else {
  1325 + $('#imgOpacity').css("background-color", "transparent");
  1326 + //$("#filloption1").css({ "pointer-events": "none" });
  1327 + //$("#filloption2").css({ "pointer-events": "none" });
  1328 + $("#edit-slider-3").css({ "pointer-events": "none" });
  1329 + $("#edit-slider-4").css({ "pointer-events": "none" });
  1330 + $("#editstylebackgroundcolor").css({ "pointer-events": "none" });
  1331 + $("#editstyleTexture").css({ "pointer-events": "none" });
  1332 + $(".enableDisableOpacity label").css({ "cursor": "default" });
  1333 + $(".enableDisableOpacity").css({ "opacity": ".5" })
  1334 + document.getElementById("filloption1").disabled = true;
  1335 + document.getElementById("filloption2").disabled = true;
  1336 + document.getElementById("filloption1").style.cursor = "default";
  1337 + document.getElementById("filloption2").style.cursor = "default";
  1338 +
  1339 +
  1340 +
  1341 + }
  1342 +
  1343 + }
  1344 + function enableDisableOutline() {
  1345 +
  1346 + if (document.getElementById('Outline-Option').checked) {
  1347 + var x = $("#outlineColor span.minicolors-swatch-color").css('background-color');
  1348 + $(".marginTopBtm10 div.outlinediv").css("border-color", x);
  1349 + // var borderWidth = $("#outlineColor span.minicolors-swatch-color").css('border-width');
  1350 + // $("#imgOpacity").css("border-width", borderWidth);
  1351 +
  1352 + $("#borderWidthCanvasElement").css({ "pointer-events": "auto" });
  1353 + $("#outlineColor").css({ "pointer-events": "auto" });
  1354 + $(".setEnableDisableForEditShapeStyle").css({ "opacity": "1" })
  1355 + }
  1356 + else {
  1357 + $('.marginTopBtm10 div.outlinediv').css("border-color", "transparent");
  1358 + $("#borderWidthCanvasElement").css({ "pointer-events": "none" });
  1359 + $("#outlineColor").css({ "pointer-events": "none" });
  1360 + $(".setEnableDisableForEditShapeStyle").css({ "opacity": ".5" })
  1361 + }
  1362 + }
  1363 +
  1364 + </script>
  1365 +
  1366 + <script>
  1367 + function Brushsize(object) {
  1368 +
  1369 + object.value = object.value.replace(/[^0-9]/g, '');
  1370 + if (parseInt(object.value) <= 0) {
  1371 + object.value = 1;
  1372 + }
  1373 + if (parseInt(object.value) >= 1 && parseInt(object.value) <= 60) {
  1374 + object.value = object.value;
  1375 + }
  1376 + if (parseInt(object.value) > 60) {
  1377 + object.value = object.value.slice(0, 1);
  1378 +
  1379 + }
  1380 +
  1381 + }
  1382 + </script>
  1383 +
  1384 +
  1385 + <!--<script src="libs/jquery/1.11.3/jquery.min.js"></script>-->
  1386 + <script src="libs/jquery/2.1.3/jquery.min.js"></script>
  1387 + <script src="libs/jquery/1.11.4/jquery-ui.js"></script>
  1388 +
  1389 + <script src="libs/jquery/jquery_plugin/jquery.mCustomScrollbar.concat.min.js"></script>
  1390 + <script src="themes/default/scripts/bootstrap/3.3.5/bootstrap.js"></script>
  1391 + <script src="libs/angular/1.4.9/angular.min.js"></script>
  1392 + <script src="libs/angular/1.4.9/angular-route.min.js"></script>
  1393 + <script src="libs/angular/1.4.9/angular-sanitize.min.js"></script>
  1394 + <script src="libs/angular/1.4.9/ngStorage.js"></script>
  1395 + <script src="content/js/custom/custom.js"></script>
  1396 + <!--Annotation Toolbar : jcanvas Library-->
  1397 +
  1398 + <script src="libs/jcanvas/jcanvas.min.js"></script>
  1399 + <script src="libs/jcanvas/jcanvas.handle.min.js"></script>
  1400 +
  1401 + <script src="libs/jinqJs.js"></script>
  1402 + <script src="libs/jquery/jquery_plugin/jsPanel/jspanel/jquery.jspanel.js"></script>
  1403 + <script src="libs/video_4_12_11/video_4_12_11.js"></script>
  1404 + <script src="libs/jquery/jquery_plugin/SpeechBubble/bubble.js"></script>
  1405 + <!--<script src="libs/jquery/jquery_plugin/jsPanel/jspanel/jquery.jspanel.min.js"></script>-->
  1406 + <script src="app/main/AIA.js"></script>
  1407 + <script src="app/main/Link.js"></script>
  1408 + <script src="content/scripts/js/custom/custom.js"></script>
  1409 + <script src="app/filters/ColorMatrixFilter.js"></script>
  1410 + <script src="app/utility/Matrix.js"></script>
  1411 + <script src="app/utility/Point.js"></script>
  1412 + <script src="app/utility/Rectangle.js"></script>
  1413 + <script src="app/utility/BitmapData.js"></script>
  1414 + <script src="app/utility/Paint.js"></script>
  1415 + <script src="app/controllers/DAController.js"></script>
  1416 + <script src="app/controllers/CIController.js"></script>
  1417 + <script src="app/controllers/CAController.js"></script>
  1418 + <script src="app/controllers/3dAController.js"></script>
  1419 + <script src="app/controllers/CurrBuildController.js"></script>
  1420 + <script src="app/controllers/AnatTestController.js"></script>
  1421 + <script src="app/controllers/LabExercController.js"></script>
  1422 + <script src="app/controllers/ADAMImgController.js"></script>
  1423 + <script src="app/controllers/AODController.js"></script>
  1424 + <script src="app/controllers/HomeController.js"></script>
  1425 + <script src="app/controllers/LinkController.js"></script>
  1426 + <script src="app/services/AuthenticationService.js"></script>
  1427 + <script src="app/services/ConfigurationService.js"></script>
  1428 + <script src="app/services/AdminService.js"></script>
  1429 + <script src="app/controllers/TileViewListController.js"></script>
  1430 +
  1431 + <script src="app/services/ModuleService.js"></script>
  1432 +
  1433 + <script src="app/services/DataService.js"></script>
  1434 + <script src="app/services/TermService.js"></script>
  1435 + <script src="libs/jquery/jquery_plugin/jqueryui.js"></script>
  1436 + <script src="libs/jquery/jquery_plugin/slider-pips/jquery-ui-slider-pips.js"></script>
  1437 + <script src="../app/services/LabExerciseService.js"></script>
  1438 + <script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui-touch-punch/0.2.3/jquery.ui.touch-punch.min.js"></script>
  1439 +
  1440 + <script src="libs/jquery/jquery_plugin/color-picker/jquery.minicolors.min.js"></script>
  1441 + <!--<script src="libs/colorpicker/jquery.minicolors.min.js"></script>-->
  1442 + <!--<script src="libs/color-picker/jquery.minicolors.min.js"></script>-->
  1443 +
  1444 + <script src="libs/sketch.js"></script>
  1445 +
  1446 + <!--<script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/0.4.1/html2canvas.js"></script>-->
  1447 + <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/aes.js"></script>
  1448 + <script src="libs/html2canvas.js"></script>
  1449 + <script src="libs/FileSaver.js"></script>
  1450 + <script src="app/services/LabExerciseService.js"></script>
  1451 + <!--<script type="text/javascript">
  1452 + $(function () {
  1453 + $('#canvas').sketch();
  1454 + });
  1455 + </script>-->
  1456 +
  1457 + <script>
  1458 +
  1459 + $(function () {
  1460 + $('[data-toggle="tooltip"]').tooltip();
  1461 + })
  1462 +
  1463 + </script>
  1464 + <script>
  1465 + (function ($) {
  1466 + $(window).load(function () {
  1467 + $(".sidebar").mCustomScrollbar({
  1468 + autoHideScrollbar: true,
  1469 + //theme:"rounded"
  1470 + });
  1471 +
  1472 + });
  1473 + })(jQuery);
  1474 + </script>
  1475 + <script>
  1476 + $(function () {
  1477 + $(".modal").draggable();
  1478 + $(".annotationTollbar").draggable();
  1479 + $(".modeleditstyle").draggable();
  1480 + $("#annotationTextModal").draggable();
  1481 + $("#modal-settings").draggable();
  1482 + });
  1483 + </script>
  1484 +
  1485 +
  1486 +
  1487 +
  1488 + <script type="text/javascript">
  1489 + $(function () {
  1490 +
  1491 + $("#text-left").on('click', function () {
  1492 +
  1493 + //Annotation: Formatting buttons color is not change when select.
  1494 +
  1495 + $("#text-center").removeClass("ActiveFormattingButtonClass");
  1496 + $("#text-right").removeClass("ActiveFormattingButtonClass");
  1497 + $("#text-left").addClass("ActiveFormattingButtonClass");
  1498 + $("#text_area").css("text-align", "left");
  1499 +
  1500 +
  1501 + });
  1502 +
  1503 +
  1504 + $("#text-center").on('click', function () {
  1505 +
  1506 + //Annotation: Formatting buttons color is not change when select.
  1507 +
  1508 + $("#text-right").removeClass("ActiveFormattingButtonClass");
  1509 + $("#text-left").removeClass("ActiveFormattingButtonClass");
  1510 + $("#text-center").addClass("ActiveFormattingButtonClass");
  1511 + $("#text_area").css("text-align", "center");
  1512 +
  1513 +
  1514 + });
  1515 +
  1516 +
  1517 + $("#text-right").on('click', function () {
  1518 +
  1519 + //Annotation: Formatting buttons color is not change when select.
  1520 +
  1521 + $("#text-left").removeClass("ActiveFormattingButtonClass");
  1522 + $("#text-center").removeClass("ActiveFormattingButtonClass");
  1523 + $("#text-right").addClass("ActiveFormattingButtonClass");
  1524 + $("#text_area").css("text-align", "right");
  1525 + });
  1526 +
  1527 +
  1528 + $("#text-bold").on('click', function () {
  1529 +
  1530 + //Annotation: Formatting buttons color is not change when select.
  1531 + $("#text-bold").toggleClass("ActiveFormattingButtonClass");
  1532 +
  1533 + if ($("#text-bold").hasClass("ActiveFormattingButtonClass")) {
  1534 + $("#text_area").css("font-weight", "bold");
  1535 + }
  1536 + else {
  1537 + $("#text_area").css("font-weight", "normal");
  1538 + }
  1539 +
  1540 +
  1541 + });
  1542 +
  1543 + $("#text-italic").on('click', function () {
  1544 +
  1545 + //Annotation: Formatting buttons color is not change when select.
  1546 + $("#text-italic").toggleClass("ActiveFormattingButtonClass");
  1547 + if ($("#text-italic").hasClass("ActiveFormattingButtonClass")) {
  1548 + $("#text_area").css("font-style", "italic");
  1549 + }
  1550 + else {
  1551 + $("#text_area").css("font-style", "normal");
  1552 + }
  1553 + });
  1554 +
  1555 + $("#text-underline").on('click', function () {
  1556 +
  1557 + //Annotation: Formatting buttons color is not change when select.
  1558 + $("#text-underline").toggleClass("ActiveFormattingButtonClass");
  1559 +
  1560 + if ($("#text-underline").hasClass("ActiveFormattingButtonClass")) {
  1561 + $("#text_area").css("text-decoration", "underline");
  1562 + }
  1563 + else {
  1564 + $("#text_area").css("text-decoration", "none");
  1565 + }
  1566 +
  1567 +
  1568 + });
  1569 +
  1570 +
  1571 + $("#selected-font-size").change(function () {
  1572 +
  1573 + $("#text_area").css("font-size", $(this).val() + "px");
  1574 + });
  1575 +
  1576 + $("#selected-font-family").change(function () {
  1577 +
  1578 + $("#text_area").css("font-family", $(this).val());
  1579 +
  1580 + });
  1581 +
  1582 +
  1583 + });
  1584 +
  1585 +
  1586 +
  1587 + </script>
  1588 +
  1589 +
  1590 + <script>
  1591 + $(document).ready(function () {
  1592 + // $("#font-color .minicolors .minicolors-swatch .minicolors-swatch-color").addClass("ActiveDefaultColorAnnotation");
  1593 +
  1594 + var borderWidth = 1;
  1595 + var borderColor = "#000";
  1596 + $("#borderWidthCanvasElement").change(function () {
  1597 + borderWidth = $(this).val();
  1598 + borderColor = $('#outlineColor .minicolors >.minicolors-swatch > .minicolors-swatch-color').css("background-color");
  1599 +
  1600 + if (borderColor != null) {
  1601 + document.getElementById("imgOpacity").parentNode.style.border = borderWidth + "px" + " " + "solid" + " " + borderColor;
  1602 + //$("#imgOpacity").parent().css("border", borderWidth + "px" + " " + "solid" + borderColor);
  1603 + } else {
  1604 +
  1605 + // $("#imgOpacity").parent().css("border", borderWidth + "px" + " " + "solid");
  1606 + document.getElementById("imgOpacity").parentNode.style.border = borderWidth + "px" + " " + "solid" + " " + borderColor;
  1607 +
  1608 + }
  1609 + });
  1610 +
  1611 +
  1612 +
  1613 + $('.borderColorCanvasPreview').each(function () {
  1614 + // $("#font-color .minicolors .minicolors-swatch .minicolors-swatch-color").addClass("ActiveDefaultColorAnnotation");
  1615 + $(this).minicolors({
  1616 + control: $(this).attr('data-control') || 'hue',
  1617 + defaultValue: $(this).attr('data-defaultValue') || '',
  1618 + format: $(this).attr('data-format') || 'hex',
  1619 + keywords: $(this).attr('data-keywords') || '',
  1620 + inline: $(this).attr('data-inline') === 'true',
  1621 + letterCase: $(this).attr('data-letterCase') || 'lowercase',
  1622 + opacity: $(this).attr('data-opacity'),
  1623 + position: $(this).attr('data-position') || 'bottom left',
  1624 + swatches: $(this).attr('data-swatches') ? $(this).attr('data-swatches').split('|') : [],
  1625 + change: function (value, opacity) {
  1626 + if (!value) return;
  1627 + if (opacity) value += ', ' + opacity;
  1628 + if (typeof console === 'object') {
  1629 + console.log(value);
  1630 +
  1631 + borderColor = value;
  1632 + //$("#imgOpacity").parent().css("border", borderWidth + "px" + " " + "solid" + borderColor);
  1633 + document.getElementById("imgOpacity").parentNode.style.border = borderWidth + "px" + " " + "solid" + " " + borderColor;
  1634 +
  1635 +
  1636 + }
  1637 + },
  1638 + theme: 'bootstrap'
  1639 + });
  1640 +
  1641 +
  1642 + });
  1643 +
  1644 +
  1645 + $('.outerBackgroundColor').each(function () {
  1646 +
  1647 + $(this).minicolors({
  1648 + control: $(this).attr('data-control') || 'hue',
  1649 + defaultValue: $(this).attr('data-defaultValue') || '',
  1650 + format: $(this).attr('data-format') || 'hex',
  1651 + keywords: $(this).attr('data-keywords') || '',
  1652 + inline: $(this).attr('data-inline') === 'true',
  1653 + letterCase: $(this).attr('data-letterCase') || 'lowercase',
  1654 + opacity: $(this).attr('data-opacity'),
  1655 + position: $(this).attr('data-position') || 'bottom left',
  1656 + swatches: $(this).attr('data-swatches') ? $(this).attr('data-swatches').split('|') : [],
  1657 + change: function (value, opacity) {
  1658 + if (!value) return;
  1659 + if (opacity) value += ', ' + opacity;
  1660 + if (typeof console === 'object') {
  1661 + console.log(value);
  1662 + $("#imgOpacity").css("background-color", value);
  1663 +
  1664 + }
  1665 + },
  1666 + theme: 'bootstrap'
  1667 + });
  1668 +
  1669 + });
  1670 +
  1671 +
  1672 + });
  1673 + </script>
  1674 + <script>
  1675 + $(function () {
  1676 + function onBrushSizeChange() {
  1677 + $('.btnCursor').addClass('activebtncolor');
  1678 + $(".btn-annotation").removeClass("activebtncolor");
  1679 + $(".btn-annotation-erase").removeClass("activebtncolor");
  1680 + $(".btn-annotation-erase").removeClass("activebtncolor");
  1681 + $(".annotationpaintbrushsize").removeClass("activebtncolor");
  1682 + var x = $('#canvasPaint').css("z-index");
  1683 +
  1684 + var y = $('#canvas').css("z-index");
  1685 + if (x > y) {
  1686 + y = parseInt(x) + 1;
  1687 + } else {
  1688 + y = parseInt(y) + 1;
  1689 + }
  1690 + $('#canvas').css("z-index", y);
  1691 + }
  1692 +
  1693 + $("#slider-range-min-2").slider({
  1694 + range: "min",
  1695 + min: 1,
  1696 + max: 60,
  1697 + value: 1,
  1698 + slide: function (event, ui) {
  1699 +
  1700 + onBrushSizeChange();
  1701 +
  1702 +
  1703 +
  1704 + $("#btnBrushSize").val(ui.value);
  1705 +
  1706 + $("#annotationpaintbrushsize").css({ "pointer-events": "auto", "opacity": "1" });
  1707 + $("#annotationpainteraser").css({ "pointer-events": "auto", "opacity": "1" });
  1708 + $("#btnBrushSizeDecrease").css({ "pointer-events": "auto", "opacity": "1" });
  1709 + $("#btnBrushSizeDecrease").css({ "pointer-events": "auto", "opacity": "1" });
  1710 +
  1711 + },
  1712 + stop: function (event, ui) {
  1713 +
  1714 + $("#paintLine").attr("data-size", ui.value);
  1715 +
  1716 + }
  1717 +
  1718 + });
  1719 +
  1720 +
  1721 + $("#btnBrushSize").keydown(function () {
  1722 + $("#btnBrushSizeDecrease").css({ "pointer-events": "auto", "opacity": "1" });
  1723 + $("#btnBrushSizeDecrease").css({ "pointer-events": "auto", "opacity": "1" });
  1724 + onBrushSizeChange();
  1725 + var brushSizevalue = this.value;
  1726 +
  1727 + $("#slider-range-min-2").slider("value", parseInt(brushSizevalue));
  1728 + });
  1729 + $("#btnBrushSize").keyup(function () {
  1730 + onBrushSizeChange();
  1731 + var brushSizevalue = this.value;
  1732 + if (brushSizevalue == "") {
  1733 +
  1734 + $("#slider-range-min-2").slider("value", 0);
  1735 +
  1736 + $("#annotationpaintbrushsize").css({ "pointer-events": "none", "opacity": ".5" });
  1737 + $("#annotationpainteraser").css({ "pointer-events": "none", "opacity": ".5" });
  1738 + }
  1739 + else {
  1740 + $("#slider-range-min-2").slider("value", parseInt(brushSizevalue));
  1741 + $("#annotationpaintbrushsize").css({ "pointer-events": "auto", "opacity": "1" });
  1742 + $("#annotationpainteraser").css({ "pointer-events": "auto", "opacity": "1" });
  1743 + }
  1744 + // $("#slider-range-min-2").slider("value", parseInt(brushSizevalue));
  1745 + });
  1746 + $("#btnBrushSizeIncrement").click(function () {
  1747 + if ($("#annotationpaintbrushsize").css('pointer-events') == 'none') {
  1748 + $("#annotationpaintbrushsize").css({ "pointer-events": "auto", "opacity": "1" });
  1749 + $("#annotationpainteraser").css({ "pointer-events": "auto", "opacity": "1" });
  1750 + $("#btnBrushSizeDecrease").css({ "pointer-events": "auto", "opacity": "1" });
  1751 + $("#btnBrushSizeDecrease").css({ "pointer-events": "auto", "opacity": "1" });
  1752 + }
  1753 +
  1754 + onBrushSizeChange();
  1755 + var brushIncrementVar = $("#btnBrushSize").val();
  1756 + if (brushIncrementVar >= 60) {
  1757 + $("#slider-range-min-2").slider("value", 60);
  1758 + }
  1759 + else if (brushIncrementVar == "") {
  1760 + var brushIncrementedValue = 1;
  1761 + $("#btnBrushSize").val(brushIncrementedValue);
  1762 + $("#slider-range-min-2").slider("value", parseInt(brushIncrementedValue));
  1763 + }
  1764 + else {
  1765 +
  1766 + var brushIncrementedValue = parseInt(brushIncrementVar) + 1;
  1767 +
  1768 + $("#btnBrushSize").val(brushIncrementedValue);
  1769 + $("#slider-range-min-2").slider("value", parseInt(brushIncrementedValue));
  1770 + }
  1771 + });
  1772 + $("#btnBrushSizeDecrease").click(function () {
  1773 +
  1774 + onBrushSizeChange();
  1775 + var brushDecreaseVar = $("#btnBrushSize").val();
  1776 + if (brushDecreaseVar == "") {
  1777 +
  1778 + $("#btnBrushSizeDecrease").css({ "pointer-events": "none", "opacity": ".5" });
  1779 + $("#btnBrushSizeDecrease").css({ "pointer-events": "none", "opacity": ".5" });
  1780 +
  1781 + }
  1782 + else if (brushDecreaseVar <= 1) {
  1783 + $("#slider-range-min-2").slider("value", 1);
  1784 + if ($("#annotationpaintbrushsize").css('pointer-events') == 'none') {
  1785 + $("#annotationpaintbrushsize").css({ "pointer-events": "auto", "opacity": "1" });
  1786 + $("#annotationpainteraser").css({ "pointer-events": "auto", "opacity": "1" });
  1787 + $("#btnBrushSizeDecrease").css({ "pointer-events": "auto", "opacity": ".5" });
  1788 + $("#btnBrushSizeDecrease").css({ "pointer-events": "auto", "opacity": ".5" });
  1789 + }
  1790 +
  1791 + }
  1792 + else {
  1793 + var brushDecrementedValue = parseInt(brushDecreaseVar) - 1;
  1794 + if ($("#annotationpaintbrushsize").css('pointer-events') == 'none') {
  1795 + $("#annotationpaintbrushsize").css({ "pointer-events": "auto", "opacity": "1" });
  1796 + $("#annotationpainteraser").css({ "pointer-events": "auto", "opacity": "1" });
  1797 + $("#btnBrushSizeDecrease").css({ "pointer-events": "auto", "opacity": "1" });
  1798 + $("#btnBrushSizeDecrease").css({ "pointer-events": "auto", "opacity": "1" });
  1799 + }
  1800 + $("#btnBrushSize").val(brushDecrementedValue);
  1801 + $("#slider-range-min-2").slider("value", parseInt(brushDecrementedValue));
  1802 + }
  1803 + });
  1804 +
  1805 + $("#btnBrushSize").val($("#slider-range-min-2").slider("value"));
  1806 + });
  1807 + </script>
  1808 +
  1809 + <script>
  1810 + $(function () {
  1811 + $("#slider-range-min-3").slider({
  1812 + range: "min",
  1813 + min: 0,
  1814 + max: 100,
  1815 + value: 20,
  1816 + change: function (event, ui) {
  1817 +
  1818 +
  1819 + }
  1820 + });
  1821 +
  1822 +
  1823 +
  1824 + });
  1825 + </script>
  1826 +
  1827 + <script>
  1828 + $(function () {
  1829 +
  1830 +
  1831 +
  1832 + $("#slider-range-min-4").slider(
  1833 + {
  1834 + range: "min",
  1835 + value: .5,
  1836 + min: 0,
  1837 + max: 1,
  1838 + step: .1,
  1839 + slide: function (event, ui) {
  1840 +
  1841 + $(".marginTopBtm10 .imgopacity").css("opacity", ui.value);
  1842 + $(".marginTopBtm10 div.outlinediv").css("opacity", ui.value);
  1843 + }
  1844 +
  1845 + }
  1846 +
  1847 +);
  1848 +
  1849 + });
  1850 +
  1851 +
  1852 +
  1853 + </script>
  1854 +
  1855 +
  1856 +
  1857 + <script>
  1858 + $(function () {
  1859 +
  1860 +
  1861 + $("#OnIdentify").on('mouseover', function () {
  1862 + $("#identify-block").addClass("custom-tooltip-annotation");
  1863 + $(".custom-tooltip-annotation").css('display', 'block');
  1864 + }).on('mouseout', function () {
  1865 + // $("#identify-block").removeClass("custom-tooltip-annotation");
  1866 + $(".custom-tooltip-annotation").css('display', 'none');
  1867 + $("#identify-block").removeClass("custom-tooltip-annotation");
  1868 + });
  1869 +
  1870 +
  1871 + $("#DrawMode").on('mouseover', function () {
  1872 + $("#draw-block").addClass("custom-tooltip-annotation");
  1873 + $(".custom-tooltip-annotation").css('display', 'block');
  1874 +
  1875 + }).on('mouseout', function () {
  1876 +
  1877 + $(".custom-tooltip-annotation").css('display', 'none');
  1878 + $("#draw-block").removeClass("custom-tooltip-annotation");
  1879 + });
  1880 +
  1881 + //#7931
  1882 + $("#OnEdtShape").on('mouseover', function () {
  1883 + $("#edit-block").addClass("custom-tooltip-annotation-edit");
  1884 + $(".custom-tooltip-annotation-edit").css('display', 'block');
  1885 +
  1886 + }).on('mouseout', function () {
  1887 +
  1888 + $(".custom-tooltip-annotation-edit").css('display', 'none');
  1889 + $("#edit-block").removeClass("custom-tooltip-annotation-edit");
  1890 + });
  1891 +
  1892 + });
  1893 + </script>
  1894 + <!-- Export Image Save Click-->
  1895 + <script>
  1896 + $(function () {
  1897 + $("#btnPrintPreview").click(function () {
  1898 + $("#canvasDiv").append("<img id='exportlogo' class='img-responsive' src='content/images/adam-logo-small.png'/>");
  1899 + html2canvas($("#canvasDiv"), {
  1900 + onrendered: function (canvas) {
  1901 + var imgsrc = canvas.toDataURL("image/png");
  1902 + console.log(imgsrc);
  1903 + 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>';
  1904 + var w = window.open();
  1905 + $(w.document.body).html(html);
  1906 + $("#filename").val("");
  1907 + $("#exportlogo").remove();
  1908 + }
  1909 + });
  1910 +
  1911 + });
  1912 + $("#btnSaveEI").click(function () {
  1913 + $("#canvasDiv").append("<img id='exportlogo' class='img-responsive' src='content/images/adam-logo-small.png'/>");
  1914 + html2canvas($("#canvasDiv"), {
  1915 + onrendered: function (canvas) {
  1916 + theCanvas = canvas;
  1917 + var fileName = document.getElementById("filename").value + '.jpg';
  1918 + if (typeof (fileName) == "undefined" || fileName == ".jpg")
  1919 + fileName = "Untitled.jpg"
  1920 + var dataURL = canvas.toDataURL("image/jpeg");
  1921 + var blob = dataURItoBlob(dataURL);
  1922 + console.log(blob);
  1923 + saveAs(blob, fileName);
  1924 + $("#exportlogo").remove();
  1925 + $("#filename").val("");
  1926 + }
  1927 + });
  1928 + $(".export-image").css("display", "none");
  1929 +
  1930 + });
  1931 + });
  1932 + function dataURItoBlob(dataURI) {
  1933 + var byteString = atob(dataURI.split(',')[1]);
  1934 + var ab = new ArrayBuffer(byteString.length);
  1935 + var ia = new Uint8Array(ab);
  1936 + for (var i = 0; i < byteString.length; i++) {
  1937 + ia[i] = byteString.charCodeAt(i);
  1938 + }
  1939 + return new Blob([ab], { type: 'image/jpeg' });
  1940 + }
  1941 + </script>
  1942 + <script>
  1943 + if (navigator.userAgent.match(/Android/i)) {
  1944 +
  1945 + $("#bodySystems").click(function () {
  1946 +
  1947 + $("#listManager").draggable('disable');
  1948 +
  1949 + }).blur(function () {
  1950 +
  1951 + $("#listManager").draggable('enable');
  1952 +
  1953 + });
  1954 +
  1955 +
  1956 +
  1957 + $("#termList").click(function () {
  1958 +
  1959 + $("#listManager").draggable('disable');
  1960 +
  1961 + }).blur(function () {
  1962 +
  1963 + $("#listManager").draggable('enable');
  1964 +
  1965 + });
  1966 +
  1967 + $("#borderWidthCanvasElement").click(function () {
  1968 +
  1969 + $("#modeleditstyle").draggable('disable');
  1970 + }).blur(function () {
  1971 + $("#modeleditstyle").draggable('enable');
  1972 + });
  1973 + }
  1974 + function ResizeImage(sizePercent) {
  1975 + var autoWidth = 427;
  1976 + var autoHeight = 547;
  1977 + var dvAutoSpnFontSize = 12;
  1978 + var imgLogoW = 77;
  1979 + var fullWidth = 620; //$('#canvasDiv').width();
  1980 + var fullHeight = 876; //$('#canvasDiv').height();
  1981 +
  1982 + if (sizePercent == 0) {
  1983 + $('#printBoxPor').width(autoWidth).height(autoHeight);//.height(dvPrintBoxPorH * sizePercent);
  1984 + $('#printBoxLan').width(autoHeight).height(autoWidth);
  1985 + $('#dvPortrait').width(autoWidth);
  1986 + $('#dvLandscape').width(autoHeight);
  1987 + $('.span-font').attr('style', 'font-size: ' + (dvAutoSpnFontSize * .65).toFixed() + 'px');
  1988 + $(".logo-image").attr('width', imgLogoW * .65);
  1989 + }
  1990 +
  1991 + else if (sizePercent == 1) {
  1992 + $('#dvPortrait').width(fullWidth * sizePercent);
  1993 + $('#dvLandscape').width(fullHeight * sizePercent);
  1994 + $('#printBoxPor').width(fullWidth * sizePercent).height(fullHeight * sizePercent);
  1995 + $('#printBoxLan').width(fullHeight * sizePercent).height(fullWidth * sizePercent);
  1996 + $('.span-font').attr('style', 'font-size: ' + dvAutoSpnFontSize + 'px');
  1997 + $(".logo-image").attr('width', imgLogoW);
  1998 + }
  1999 +
  2000 + else {
  2001 + $('#dvPortrait').width(fullWidth * sizePercent);
  2002 + $('#dvLandscape').width(fullHeight * sizePercent);
  2003 + $('.span-font').attr('style', 'font-size: ' + (dvAutoSpnFontSize * sizePercent).toFixed() + 'px !important');
  2004 + $(".logo-image").attr('width', (imgLogoW * sizePercent).toFixed());
  2005 + if (sizePercent > 1) {
  2006 + $('#printBoxPor').width(fullWidth * sizePercent).height(fullHeight * sizePercent);
  2007 + $('#printBoxLan').width(fullHeight * sizePercent).height(fullWidth * sizePercent);
  2008 + }
  2009 + else {
  2010 + $('#printBoxPor').width(fullWidth * sizePercent).height(fullHeight * sizePercent);
  2011 + $('#printBoxLan').width(fullHeight * sizePercent).height(fullWidth * sizePercent);
  2012 + }
  2013 + }
  2014 + }
  2015 + </script>
  2016 + <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-browser/0.1.0/jquery.browser.min.js"></script>
  2017 +</body>
  2018 +
  2019 +</html>
0 2020 \ 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 +
  21 + protected void Page_Load(object sender, EventArgs e)
  22 + {
  23 + urlParams = "XYZ";
  24 +
  25 + if (Request.HttpMethod == "POST")
  26 + {
  27 + if (Request.Form["calsCredantial"] != null && Request.Form["calsCredantial"].ToString() == "yes")
  28 + {
  29 + urlParams = "?calsCredantial=" + Request.Form["calsCredantial"].ToString() + "&username=" + Request.Form["calsUsername"].ToString() + "&password=" + Request.Form["calsPassword"].ToString();
  30 + }
  31 + }
  32 +
  33 + string c = "nm";
  34 + if (Request.QueryString["account"] != null)
  35 + {
  36 + // http://stackoverflow.com/questions/9032005/request-servervariableshttp-referer-is-not-working-in-ie
  37 + // http://stackoverflow.com/questions/5643773/http-referrer-not-always-being-passed?rq=1
  38 + //
  39 + strSiteReferer = Request.ServerVariables["HTTP_REFERER"];
  40 + strAccountNumber = Request.QueryString["account"];
  41 + strEdition = Request.QueryString["edition"];
  42 + string remoteIPAddress = Request.ServerVariables["REMOTE_ADDR"];
  43 + string strHttpReferer = null;
  44 + int intSiteId = 0;
  45 +
  46 +
  47 +
  48 +
  49 + if (Request.Form["referer"] != null)
  50 + {
  51 + strUrlReferer = Request.Form["referer"];
  52 + }
  53 + else if (Request.QueryString["referer"] == null)
  54 + {
  55 + strUrlReferer = Request.ServerVariables["HTTP_REFERER"];
  56 + }
  57 + else if (Request.Params["referer"] != null)
  58 + {
  59 + strUrlReferer = Request.Params["referer"];
  60 + }
  61 + else
  62 + {
  63 +
  64 + strUrlReferer = Request.QueryString["referer"];
  65 + }
  66 +
  67 +
  68 + if (strUrlReferer != "" && strUrlReferer != null)
  69 + {
  70 + strHttpReferer = strUrlReferer.ToLower().Replace("http://", "").Replace("https://", "").Replace("www.", "").ToString().Split('/')[0].ToString();
  71 +
  72 + if (strHttpReferer.IndexOf(":") != -1)
  73 + {
  74 + char[] delimiters = new char[] { ':' };
  75 + string[] parts = strHttpReferer.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);
  76 + strHttpReferer = parts[0];
  77 + }
  78 + }
  79 +
  80 + try
  81 + {
  82 +
  83 + if (strHttpReferer != "" && strHttpReferer != null)
  84 + strIPAddress = strHttpReferer;
  85 + if (strIPAddress == "" || strIPAddress == null)
  86 + strIPAddress = remoteIPAddress;
  87 +
  88 +
  89 + // intSiteId = LicenseHelper.GetInstance().ValidateLicenseSiteIP(strIPAddress, remoteIPAddress, strAccountNumber, Convert.ToByte(strEdition));
  90 +
  91 + }
  92 + catch (Exception objEx)
  93 + {
  94 +
  95 + }
  96 + //urlParams = "?siteIP=" + strIPAddress + "&status=" + intSiteId + "&accountNumber=" + strAccountNumber + "&edition=" + strEdition + "&urlReferer=" + (strSiteReferer != "" && strSiteReferer != null ? strSiteReferer : "");
  97 + //urlParams = "siteIP=" + strIPAddress + "&accountNumber=" + strAccountNumber + "&edition=" + strEdition + "&urlReferer=" + (strSiteReferer != "" && strSiteReferer != null ? strSiteReferer : "");
  98 +
  99 + //For the ease of splitting desgined urlParms in the pattern of
  100 + //urlParams = siteIP&accountNumber&remoteIPAddress&edition&urlReferer; without mentioning the variableName
  101 + urlParams = strIPAddress + "&" + remoteIPAddress+"&"+ strAccountNumber + "&" + strEdition + "&" + (strSiteReferer != "" && strSiteReferer != null ? strSiteReferer : "");
  102 +
  103 +
  104 + }
  105 + }
  106 + }
  107 +}
0 108 \ 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