Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse code

changes to security and css

  • Loading branch information...
commit 4f6abfb2e3b5323b101b6a8c4e9fc0b65eeacec4 1 parent e514c44
authored January 06, 2011
3  .classpath
@@ -40,5 +40,8 @@
40 40
 	<classpathentry kind="lib" path="src/main/webapp/WEB-INF/lib/solr-solrj-1.4.0.jar"/>
41 41
 	<classpathentry kind="lib" path="src/main/webapp/WEB-INF/lib/stax-api-1.0.1.jar"/>
42 42
 	<classpathentry kind="lib" path="src/main/webapp/WEB-INF/lib/wstx-asl-3.2.7.jar"/>
  43
+	<classpathentry kind="lib" path="src/main/webapp/WEB-INF/lib/im4java-1.1.0.jar"/>
  44
+	<classpathentry kind="lib" path="src/main/webapp/WEB-INF/lib/javax.jms.jar"/>
  45
+	<classpathentry kind="lib" path="src/main/webapp/WEB-INF/lib/jms.jar"/>
43 46
 	<classpathentry kind="output" path="target/classes"/>
44 47
 </classpath>
6  src/main/java/gov/nysenate/opendirectory/models/Person.java
@@ -313,7 +313,7 @@ public void setPermissions (HashMap<String, TreeSet<String>> permissions){
313 313
 	public void setCredentials (TreeSet<String> credentials){
314 314
 		//There must always be a valid set of credentials for every single person
315 315
 		if (credentials == null || credentials.isEmpty() )
316  
-			credentials = new TreeSet<String>(Arrays.asList("public", "senate"));
  316
+			credentials = new TreeSet<String>(Arrays.asList(/*"public", */"senate"));
317 317
 		this.credentials = credentials;
318 318
 	}
319 319
 	public void setBio(String bio){
@@ -462,7 +462,7 @@ public synchronized static Person getAdmin() {
462 462
 			admin = new Person();
463 463
 			admin.setFullName("Administrator");
464 464
 			admin.setPermissions(new HashMap<String,TreeSet<String>>());
465  
-			admin.setCredentials(new TreeSet<String>(Arrays.asList("admin", "admin,")));	
  465
+			admin.setCredentials(new TreeSet<String>(Arrays.asList("admin"/*, "admin,"*/)));	
466 466
 		}
467 467
 		return admin;
468 468
 	}
@@ -474,7 +474,7 @@ public synchronized static Person getAnon() {
474 474
 			anon.setPermissions(new HashMap<String, TreeSet<String>>());
475 475
 			//the 'public' and 'public,' setting is black magic.. for some reason
476 476
 			//some queries work only with the comma..
477  
-			anon.setCredentials(new TreeSet<String>(Arrays.asList("public","public,")));
  477
+			anon.setCredentials(new TreeSet<String>(Arrays.asList("public"/*,"public,"*/)));
478 478
 		}
479 479
 		return anon;
480 480
 	}
4  src/main/java/gov/nysenate/opendirectory/servlets/APIServlet.java
@@ -134,7 +134,7 @@ public void doSearch(Vector<String> args) throws ApiException, IOException {
134 134
 				String format = args.get(0);
135 135
 				if(formatSet.contains(format)) {
136 136
 					String query = self.httpRequest.getParameter("query");
137  
-					ArrayList<Person> people = self.solrSession.loadPeopleByQuery(query);
  137
+					ArrayList<Person> people = self.solrSession.loadPeopleByQuery(query, true);
138 138
 					
139 139
 					writeResponse(people,format);
140 140
 					
@@ -180,7 +180,7 @@ public void doPerson(Vector<String> args) throws ApiException, IOException {
180 180
 	    					String format = parts[1];
181 181
 	    					
182 182
 	    					if(formatSet.contains(format)) {
183  
-	    						writeResponse(self.solrSession.loadPeopleByQuery(method+":("+term+")"),format);
  183
+	    						writeResponse(self.solrSession.loadPeopleByQuery(method+":("+term+")", true),format);
184 184
 	    					} else {
185 185
 	    						throw new ApiException("Format "+format+"is currently not recognized!");
186 186
 	    					}
2  src/main/java/gov/nysenate/opendirectory/servlets/SearchServlet.java
@@ -32,7 +32,7 @@ public void doGet(HttpServletRequest request, HttpServletResponse response) thro
32 32
 			if(query == null)
33 33
 				throw new SearchServletException("No query supplied with the search request.");
34 34
 			
35  
-			ArrayList<Person> people = self.solrSession.loadPeopleByQuery(query);
  35
+			ArrayList<Person> people = self.solrSession.loadPeopleByQuery(query, true);
36 36
 			
37 37
 			request.setAttribute("query", query);
38 38
 			request.setAttribute("results", people);
38  src/main/java/gov/nysenate/opendirectory/solr/SolrSession.java
@@ -39,8 +39,27 @@ public static void main(String[] args) throws SolrServerException, IOException {
39 39
 		Solr solr = new Solr().connect();
40 40
 		SolrSession session = solr.newSession(Person.getAdmin());
41 41
 		
  42
+		Person p1 = session.loadPersonByUid("helpline");
42 43
 		
43  
-		System.out.println(session.loadPeopleByQuery("chief of staff").size());
  44
+		System.out.println(p1.getFullName());
  45
+		
  46
+		if(p1 == null) {
  47
+			System.out.println("oh!");
  48
+		}
  49
+		
  50
+//		session.loadPeopleByQuery("skills:(Drupal)");
  51
+		
  52
+//		Person p1 = session.loadPersonByUid("yee");
  53
+//		Person p2 = session.loadPersonByUid("hoppin");
  54
+//		Person p3 = session.loadPersonByUid("richard");
  55
+//		
  56
+//		p1.setSkills(new TreeSet<String>(Arrays.asList("Drupal, bluebird, crm, drupal, excel, facebook, html, new media, nysenate.gov, project management, social media, statistical analysis, twitter, video".split(", "))));
  57
+//		p2.setSkills(new TreeSet<String>(Arrays.asList("Drupal, Geographic Information Systems (GIS), Remove Sensing (satellite imagery), grassroots organizing, open source software, team building, web application functional design".split(", "))));
  58
+//		p3.setSkills(new TreeSet<String>(Arrays.asList("Apple, CSS, CSS3, Drupal, HTML, HTML5, PHP, Social Media".split(", "))));
  59
+//	
  60
+//		session.savePerson(p1);
  61
+//		session.savePerson(p2);
  62
+//		session.savePerson(p3);
44 63
 	}
45 64
 	
46 65
 	public SolrSession(Person user, Solr solr) {
@@ -53,7 +72,7 @@ public SolrSession(Person user, Solr solr) {
53 72
 	public Person loadPersonByUid(String uid) {
54 73
 		
55 74
 		//Do the query on the uid field
56  
-		ArrayList<Person> people = loadPeopleByQuery("uid:"+uid);
  75
+		ArrayList<Person> people = loadPeopleByQuery("uid:"+uid, false);
57 76
 		
58 77
 		//Return null on no results, sometimes getResults returns null
59 78
 		if(people.isEmpty() == true) {
@@ -68,21 +87,21 @@ public Person loadPersonByUid(String uid) {
68 87
 		//throw new SolrSessionException("UID provided ("+uid+") was not unique in solr!");
69 88
 	}
70 89
 	
71  
-	public ArrayList<Person> loadPeopleByQuery(String query) {
72  
-		return loadPeopleBySortedQuery(query,null,false);
  90
+	public ArrayList<Person> loadPeopleByQuery(String query, boolean fuzz) {
  91
+		return loadPeopleBySortedQuery(query,null,false, fuzz);
73 92
 	}
74 93
 	
75  
-	public ArrayList<Person> loadSortedPeople(String sortField, boolean asc) {
  94
+	public ArrayList<Person> loadSortedPeople(String sortField, boolean asc, boolean fuzz) {
76 95
 		//Use the otype field to locate all person documents
77  
-		return loadPeopleBySortedQuery("otype:person", sortField, asc);
  96
+		return loadPeopleBySortedQuery("otype:person", sortField, asc, fuzz);
78 97
 	}
79 98
 	
80 99
 	public ArrayList<Person> loadPeople() {
81 100
 		//Use the otype field to locate all person documents
82  
-		return loadPeopleBySortedQuery("otype:person", null, false);
  101
+		return loadPeopleBySortedQuery("otype:person", null, false, false);
83 102
 	}
84 103
 	
85  
-	public ArrayList<Person> loadPeopleBySortedQuery(String query, String sortField, boolean asc) {
  104
+	public ArrayList<Person> loadPeopleBySortedQuery(String query, String sortField, boolean asc, boolean fuzz) {
86 105
 		
87 106
 		String creds = SerialUtils.writeStringSet(user.getCredentials(),", ");		
88 107
 				
@@ -96,7 +115,7 @@ public Person loadPersonByUid(String uid) {
96 115
 		QueryResponse results = null;
97 116
 		results = solr.sortedQuery(queryParser(query,creds, "(\"", "\")"), 2000, sortField, asc);
98 117
 		
99  
-		if(results == null || results.getResults().isEmpty()) {
  118
+		if(fuzz && (results == null || results.getResults().isEmpty())) {
100 119
 			results = solr.sortedQuery(queryParser(
101 120
 					query,creds, "(", ")"), 2000, sortField, asc);
102 121
 			
@@ -190,6 +209,7 @@ private void addPerson(Person person) throws SolrServerException, IOException {
190 209
 	}
191 210
 	
192 211
 	public String queryParser(String query, String creds, String wrpL, String wrpR) {
  212
+		creds = creds + "*";
193 213
 		String aon = "(?i:and|or|not)";
194 214
 		
195 215
 		TreeSet<String> basics = new TreeSet<String>(Arrays.asList("uid","otype","firstName","lastName","fullName"));
989  src/main/webapp/css/application.css
... ...
@@ -1,49 +1,70 @@
1  
-html,body,div,ul,li { margin:0px; padding:0px; }
2  
-html, body { width:100%; }
3  
-pre { font-family:inherit; }
  1
+html,body,div,ul,li {
  2
+	margin: 0px;
  3
+	padding: 0px;
  4
+}
4 5
 
5  
-.clear { clear:both; }
  6
+html,body {
  7
+	width: 100%;
  8
+}
6 9
 
7  
-a,
8  
-a:visited {
9  
-  color: #1B5187;
  10
+pre {
  11
+	font-family: inherit;
10 12
 }
11 13
 
12  
-a:hover {
13  
-  color: #3D83A9;
  14
+.clear {
  15
+	clear: both;
  16
+}
  17
+
  18
+a,a:visited {
  19
+	color: #1B5187;
14 20
 }
15 21
 
  22
+a:hover {
  23
+	color: #3D83A9;
  24
+}
16 25
 
17 26
 #edit_button {
18  
-	text-align:center;
19  
-	padding:30px 0px 15px 0px;
20  
-}
21  
-	#edit_link { padding:10px 20px; border:1px;
22  
-		font-size:20px;
23  
-		font-weight:bold;
24  
-		color:#E0CC53;
25  
-		text-decoration:none; 
26  
-		background:#458BD1;
27  
-		border:2px solid;
28  
-		border-color:#2A5885;
29  
-		border-color: rgba(42, 88, 133, 0.7);
30  
-	}
31  
-	#edit_link:hover { text-decoration:underline; }
32  
-	#edit_link:visited { color:#E0CC53; }
33  
-	
  27
+	text-align: center;
  28
+	padding: 30px 0px 15px 0px;
  29
+}
  30
+
  31
+#edit_link {
  32
+	padding: 10px 20px;
  33
+	border: 1px;
  34
+	font-size: 20px;
  35
+	font-weight: bold;
  36
+	color: #E0CC53;
  37
+	text-decoration: none;
  38
+	background: #458BD1;
  39
+	border: 2px solid;
  40
+	border-color: #2A5885;
  41
+	border-color: rgba(42, 88, 133, 0.7);
  42
+}
  43
+
  44
+#edit_link:hover {
  45
+	text-decoration: underline;
  46
+}
  47
+
  48
+#edit_link:visited {
  49
+	color: #E0CC53;
  50
+}
  51
+
34 52
 .social-icon {
35  
-	width:16px;
36  
-	height:18px;
37  
-	text-indent:20px;
  53
+	width: 16px;
  54
+	height: 18px;
  55
+	text-indent: 20px;
38 56
 	padding: 0px 2px;
39 57
 }
  58
+
40 59
 .social-icon a:link {
41 60
 	color: blue;
42 61
 	text-decoration: none;
43 62
 }
  63
+
44 64
 .social-icon a:hover {
45 65
 	text-decoration: underline;
46 66
 }
  67
+
47 68
 .social-icon a:visited {
48 69
 	color: blue;
49 70
 	text-decoration: underline;
@@ -52,158 +73,191 @@ a:hover {
52 73
 body {
53 74
 	color: #012849;
54 75
 	font-family: Times New Roman, serif;
55  
-	background: url(/opendirectory/img/background_main.png) top left repeat-x;
  76
+	background: url(/opendirectory/img/background_main.png) top left
  77
+		repeat-x;
56 78
 }
57  
- 
  79
+
58 80
 #page {
59  
-	width:880px;
60  
-	margin:0 auto;
  81
+	width: 880px;
  82
+	margin: 0 auto;
61 83
 	background: #E2DED5;
62 84
 }
63 85
 
64 86
 #header {
65  
-	background:url(/opendirectory/img/background_header.jpg) top left no-repeat;
66  
-	padding:16px 0px 0px 0px;
67  
-	height:77px;
68  
-}
69  
-
70  
-	#logo {
71  
-		width: 250px;
72  
-		height: 55px;
73  
-		margin-top:16px 0px 0px 5px;
74  
-		border:0px;
75  
-	}
76  
-
77  
-	#user_box {
78  
-		float:right;
79  
-		text-align:right;
80  
-		padding:10px;
81  
-		background:#458BD1;
82  
-		background: rgba(69, 139, 209, 0.5);
83  
-		border:2px solid;
84  
-		border-color:#2A5885;
85  
-		border-color: rgba(42, 88, 133, 0.7);
86  
-	}
  87
+	background: url(/opendirectory/img/background_header.jpg) top left
  88
+		no-repeat;
  89
+	padding: 16px 0px 0px 0px;
  90
+	height: 77px;
  91
+}
  92
+
  93
+#logo {
  94
+	width: 250px;
  95
+	height: 55px;
  96
+	margin-top: 16px 0px 0px 5px;
  97
+	border: 0px;
  98
+}
  99
+
  100
+#user_box {
  101
+	float: right;
  102
+	text-align: right;
  103
+	padding: 10px;
  104
+	background: #458BD1;
  105
+	background: rgba(69, 139, 209, 0.5);
  106
+	border: 2px solid;
  107
+	border-color: #2A5885;
  108
+	border-color: rgba(42, 88, 133, 0.7);
  109
+}
  110
+
  111
+#user_box a {
  112
+	color: #E0CC53;
  113
+	font-size: 14px;
  114
+	font-weight: bold;
  115
+	text-decoration: none;
  116
+}
  117
+
  118
+#user_box a:visited {
  119
+	color: #E0CC53;
  120
+}
  121
+
  122
+#user_box li {
  123
+	display: inline;
  124
+	list-icon-style: none;
  125
+	padding: 0px 15px;
  126
+}
  127
+
  128
+#welcome {
  129
+	color: white;
  130
+	font-weight: bold;
  131
+}
  132
+
  133
+#user_top_bar {
87 134
 	
88  
-		#user_box a {
89  
-			color:#E0CC53;
90  
-			font-size:14px;
91  
-			font-weight:bold;
92  
-			text-decoration:none;
93  
-
94  
-		}
95  
-		#user_box a:visited {
96  
-			color:#E0CC53;
97  
-		}
98  
-		
99  
-		#user_box li {
100  
-			display:inline; 
101  
-			list-icon-style:none;
102  
-			padding:0px 15px;
103  
-		}
104  
-		
105  
-		#welcome { color:white; font-weight:bold; }
106  
-		
107  
-		#user_top_bar { }
108  
-		#user_bottom_bar { color:white; font-weight:normal; }  
109  
-  
  135
+}
  136
+
  137
+#user_bottom_bar {
  138
+	color: white;
  139
+	font-weight: normal;
  140
+}
  141
+
110 142
 #nav_bar {
111 143
 	color: white;
112  
-	background: url(/opendirectory/img/background_menu.png) top left repeat-x;
  144
+	background: url(/opendirectory/img/background_menu.png) top left
  145
+		repeat-x;
113 146
 	line-height: 30px;
114 147
 	font-family: Helvetica, Arial, sans-serif;
115 148
 }
116  
-	#nav_bar a { color:white; text-decoration:none; }
117  
-	#nav_bar a:hover { text-decoration:underline; }
118  
-
119  
-  	#nav_bar ul {
120  
-  		display:inline;
121  
-	  	list-icon-style:none;
122  
-	  	padding-left:10px;
123  
-  	}
124  
-  	
125  
-	  	#nav_bar li { display:inline; }
126  
-	  	.sep { padding:0px 10px; display:inline; }
127  
-  	  	  
128  
-  		#nav_search { float:right; display:inline; margin-top:3px;}
129  
-			#nav_search_input { display:inline; margin-left:5px; }
130  
-			
  149
+
  150
+#nav_bar a {
  151
+	color: white;
  152
+	text-decoration: none;
  153
+}
  154
+
  155
+#nav_bar a:hover {
  156
+	text-decoration: underline;
  157
+}
  158
+
  159
+#nav_bar ul {
  160
+	display: inline;
  161
+	list-icon-style: none;
  162
+	padding-left: 10px;
  163
+}
  164
+
  165
+#nav_bar li {
  166
+	display: inline;
  167
+}
  168
+
  169
+.sep {
  170
+	padding: 0px 10px;
  171
+	display: inline;
  172
+}
  173
+
  174
+#nav_search {
  175
+	float: right;
  176
+	display: inline;
  177
+	margin-top: 3px;
  178
+}
  179
+
  180
+#nav_search_input {
  181
+	display: inline;
  182
+	margin-left: 5px;
  183
+}
  184
+
131 185
 #top_info {
132  
-	text-align:right;
  186
+	text-align: right;
133 187
 }
134 188
 
135 189
 /*Start New CSS*/
136  
-
137 190
 #splash_logo {
138  
-  margin-left: 49px;
139  
-  margin-top: 20px;
140  
-  height: 39px;
  191
+	margin-left: 49px;
  192
+	margin-top: 20px;
  193
+	height: 39px;
141 194
 }
142 195
 
143 196
 #splash_desc {
144  
-  text-align: left;
145  
-  position: relative;
146  
-  width: 500px;
147  
-  margin: 0 auto;
  197
+	text-align: left;
  198
+	position: relative;
  199
+	width: 500px;
  200
+	margin: 0 auto;
148 201
 }
149 202
 
150 203
 .splash_new {
151  
-  text-align: center;
152  
-  margin: 0 auto !important;
153  
-  position: relative !important;
154  
-  z-index: 4;
155  
-  width: 500px;
156  
- 
157  
-}
158  
-	ul.splashProfiles li {
159  
-		display: inline;
160  
-	}
161  
-	ul.splashProfiles li a {
162  
-		float: left;
163  
-		padding: 10px;
164  
-		position: relative;
165  
-		font-size: 15px;
166  
-		margin: 5px;
167  
-		max-width: 100px;
168  
-		text-decoration: none;
169  
-		color: #333;
170  
-		background: #eee;
171  
-		border: 1px solid #fff;
172  
-		height: 200px;
173  
-		-moz-box-shadow: 0px 2px 15px #333;
174  
-		-webkit-box-shadow: 0px 2px 15px #333;
175  
-		text-align: center;
176  
-	}
177  
-
178  
-	ul.splashProfiles li a::after {
179  
-		padding-top: 10px;
180  
-		content: attr(title);
181  
-		display: block;
182  
-		text-align: center;
183  
-	}
  204
+	text-align: center;
  205
+	margin: 0 auto !important;
  206
+	position: relative !important;
  207
+	z-index: 4;
  208
+	width: 500px;
  209
+}
  210
+
  211
+ul.splashProfiles li {
  212
+	display: inline;
  213
+}
  214
+
  215
+ul.splashProfiles li a {
  216
+	float: left;
  217
+	padding: 10px;
  218
+	position: relative;
  219
+	font-size: 15px;
  220
+	margin: 5px;
  221
+	max-width: 100px;
  222
+	text-decoration: none;
  223
+	color: #333;
  224
+	background: #eee;
  225
+	border: 1px solid #fff;
  226
+	height: 200px;
  227
+	-moz-box-shadow: 0px 2px 15px #333;
  228
+	-webkit-box-shadow: 0px 2px 15px #333;
  229
+	text-align: center;
  230
+}
  231
+
  232
+ul.splashProfiles li a::after {
  233
+	padding-top: 10px;
  234
+	content: attr(title);
  235
+	display: block;
  236
+	text-align: center;
  237
+}
184 238
 
185 239
 /* Quick Results */
186 240
 .quickresult {
187  
-  position: fixed !important;
188  
-  width:304px;
189  
-  z-index:10;
190  
-  border-left:solid 1px #dedede;
191  
-  border-right:solid 1px #dedede;
192  
-  background:#fff;
193  
-  color:#777;
194  
-  line-height:14px;
195  
-  font-size:10pt;
196  
-  overflow:hidden;
197  
-  visibility:hidden;
198  
-  z-index: 7 !important;
199  
-}
200  
-
201  
-#quickresult-body {
202  
-  
203  
-  /*position:absolute;
  241
+	position: fixed !important;
  242
+	width: 304px;
  243
+	z-index: 10;
  244
+	border-left: solid 1px #dedede;
  245
+	border-right: solid 1px #dedede;
  246
+	background: #fff;
  247
+	color: #777;
  248
+	line-height: 14px;
  249
+	font-size: 10pt;
  250
+	overflow: hidden;
  251
+	visibility: hidden;
  252
+	z-index: 7 !important;
  253
+}
  254
+
  255
+#quickresult-body { /*position:absolute;
204 256
   top:122px;
205 257
   left:170px;*/
  258
+	
206 259
 }
  260
+
207 261
 #quickresult-header {
208 262
   position: absolute !important;
209 263
 	color: #777;
@@ -211,238 +265,232 @@ body {
211 265
 	margin-left: 5px;
212 266
 }
213 267
 
214  
-.quickresult ul, .quickresult li {
215  
-  list-style-type:none;
216  
-  margin:0px;
217  
-  border-bottom:1px solid #ccc;
218  
-  border-top:1px solid #ccc;
  268
+.quickresult ul,.quickresult li {
  269
+	list-style-type: none;
  270
+	margin: 0px;
  271
+	border-bottom: 1px solid #ccc;
  272
+	border-top: 1px solid #ccc;
219 273
 }
  274
+
220 275
 .quickresult_box {
221  
-  margin-top:0px;
222  
-  padding:4px; 
223  
-  font-size:12px; 
  276
+	margin-top: 0px;
  277
+	padding: 4px;
  278
+	font-size: 12px;
224 279
 }
  280
+
225 281
 .quickresult_box:hover {
226  
-  background:#FFFFCC;
227  
-  color:#FFFFFF;
  282
+	background: #FFFFCC;
  283
+	color: #FFFFFF;
228 284
 }
229  
-/* End Quick Results */
230 285
 
  286
+/* End Quick Results */
231 287
 #main {
232  
-  width: 840px;
233  
-  float: left;
234  
-  position: relative;
235  
-  margin: 20px;
236  
-  margin-bottom: 25px;
237  
-  background: #ffffff url(/opendirectory/img/background_footer.png) repeat-x bottom left;
238  
-  font-family: Helvetica, Arial, sans-serif;
239  
-  -webkit-box-shadow: 0px 0px 15px rgba(0,0,0,0.55);
240  
-  -mox-box-shadow: 0px 0px 15px rgba(0,0,0,0.55);
241  
-  box-shadow: 0px 0px 15px rgba(0,0,0,0.55);
242  
-  -webkit-border-radius: 7px;
243  
-  -moz-border-radius: 7px;
244  
-  border-radius: 7px;
245  
-  min-height: 500px;
246  
-  padding-bottom: 15px;
  288
+	width: 840px;
  289
+	float: left;
  290
+	position: relative;
  291
+	margin: 20px;
  292
+	margin-bottom: 25px;
  293
+	background: #ffffff url(/opendirectory/img/background_footer.png)
  294
+		repeat-x bottom left;
  295
+	font-family: Helvetica, Arial, sans-serif;
  296
+	-webkit-box-shadow: 0px 0px 15px rgba(0, 0, 0, 0.55);
  297
+	-mox-box-shadow: 0px 0px 15px rgba(0, 0, 0, 0.55);
  298
+	box-shadow: 0px 0px 15px rgba(0, 0, 0, 0.55);
  299
+	-webkit-border-radius: 7px;
  300
+	-moz-border-radius: 7px;
  301
+	border-radius: 7px;
  302
+	min-height: 500px;
  303
+	padding-bottom: 15px;
247 304
 }
248 305
 
249 306
 #main p {
250  
-  white-space: pre-wrap;
  307
+	white-space: pre-wrap;
251 308
 }
252 309
 
253 310
 .ratio_left {
254  
-  width: 38.19660117%;
255  
-	float:left;
  311
+	width: 38.19660117%;
  312
+	float: left;
256 313
 }
257 314
 
258 315
 .ratio_right {
259  
-  width: 61.80339883%;
260  
-  float: right;
  316
+	width: 61.80339883%;
  317
+	float: right;
261 318
 }
262 319
 
263 320
 .edit_left {
264  
-	 width: 50%;
265  
- 	 float: left;
  321
+	width: 50%;
  322
+	float: left;
266 323
 }
267 324
 
268 325
 .edit_right {
269  
-	 width: 50%;
270  
- 	 float: right;
  326
+	width: 50%;
  327
+	float: right;
271 328
 }
272 329
 
273 330
 #main_left div {
274  
-  margin-left: 20px;
275  
-  margin-top: 20px;
  331
+	margin-left: 20px;
  332
+	margin-top: 20px;
276 333
 }
277 334
 
278 335
 #main_regular {
279  
-	margin-left:20px;
280  
-	margin-top:20px;
  336
+	margin-left: 20px;
  337
+	margin-top: 20px;
281 338
 	margin-bottom: 5px;
282 339
 }
283 340
 
284  
-.contact p,
285  
-.admin p {
286  
-  margin-right: 10px;
287  
-  margin-bottom: -15px;
  341
+.contact p,.admin p {
  342
+	margin-right: 10px;
  343
+	margin-bottom: -15px;
288 344
 }
289 345
 
290 346
 #profile_bookmark a:before {
291  
-  content: url(/opendirectory/img/social_favorite_15x15.png) " ";
  347
+	content: url(/opendirectory/img/social_favorite_15x15.png) " ";
292 348
 }
293 349
 
294 350
 #profile_edit a:before {
295  
-  content: url(/opendirectory/img/admin_edit_15x15.png) " ";
  351
+	content: url(/opendirectory/img/admin_edit_15x15.png) " ";
296 352
 }
297 353
 
298  
-#profile_bookmark a,
299  
-#profile_edit a,
300  
-.vcard a {
301  
-  text-decoration: none;
  354
+#profile_bookmark a,#profile_edit a,.vcard a {
  355
+	text-decoration: none;
302 356
 }
303 357
 
304  
-#profile_bookmark a:hover,
305  
-#profile_edit a:hover,
306  
-.vcard a:hover {
307  
-  text-decoration: underline;
  358
+#profile_bookmark a:hover,#profile_edit a:hover,.vcard a:hover {
  359
+	text-decoration: underline;
308 360
 }
309 361
 
310 362
 #profile_bookmark {
311  
-  margin-bottom: 5px;
  363
+	margin-bottom: 5px;
312 364
 }
313 365
 
314  
-#senate_phone:before,
315  
-#senate_email:before {
316  
-  content: "Senate: ";
  366
+#senate_phone:before,#senate_email:before {
  367
+	content: "Senate: ";
317 368
 }
318 369
 
319  
-#additional_phone:before,
320  
-#additional_email:before {
321  
-  content: "Add'l: ";
  370
+#additional_phone:before,#additional_email:before {
  371
+	content: "Add'l: ";
322 372
 }
323 373
 
324 374
 #additional_irc:before {
325  
-  content: "IRC: ";
  375
+	content: "IRC: ";
326 376
 }
327 377
 
328 378
 #senate_location:before {
329  
-  content: "Location: ";
  379
+	content: "Location: ";
330 380
 }
331 381
 
332 382
 .vcard {
333  
-  margin-bottom: 20px;
  383
+	margin-bottom: 20px;
334 384
 }
335 385
 
336 386
 .vcard a:before {
337  
-  content: url(/opendirectory/img/social_download_15x15.png);
  387
+	content: url(/opendirectory/img/social_download_15x15.png);
338 388
 }
339 389
 
340 390
 #header_person {
341  
-  text-align: right;
342  
-  margin-right: 20px; 
  391
+	text-align: right;
  392
+	margin-right: 20px;
343 393
 }
  394
+
344 395
 #bio {
345  
-  text-align: left;
346  
-  margin-right: 20px;
  396
+	text-align: left;
  397
+	margin-right: 20px;
347 398
 }
348 399
 
349 400
 #bio p:before {
350  
-  content: "     ";/*Change out for tab unicode*/
  401
+	content: "     "; /*Change out for tab unicode*/
351 402
 }
352 403
 
353 404
 #name {
354  
-  font-size: 2.5em;
355  
-  margin-bottom: -.5em;
  405
+	font-size: 2.5em;
  406
+	margin-bottom: -.5em;
356 407
 }
357  
-#title,
358  
-#office {
359  
-  font-size: 1.5em;
  408
+
  409
+#title,#office {
  410
+	font-size: 1.5em;
360 411
 }
  412
+
361 413
 #title {
362  
-  margin-bottom: -1em;
  414
+	margin-bottom: -1em;
363 415
 }
  416
+
364 417
 /* Probably unneeded, but here in case
365 418
 #si_wrapper {
366 419
   margin-right: 20px;
367 420
 }
368 421
 */
369  
-
370  
-#skills h3,
371  
-#interests h3 {
372  
-  margin-bottom: 5px;
  422
+#skills h3,#interests h3 {
  423
+	margin-bottom: 5px;
373 424
 }
374 425
 
375  
-#skills,
376  
-#interests {
377  
-  margin-right: 20px;
378  
-  margin-bottom: 20px;
  426
+#skills,#interests {
  427
+	margin-right: 20px;
  428
+	margin-bottom: 20px;
379 429
 }
380 430
 
381 431
 #skills ul {
382  
-  margin-bottom: -10px;
  432
+	margin-bottom: -10px;
383 433
 }
384 434
 
385  
-#skills li,
386  
-#interests li {
387  
-  display: inline;
  435
+#skills li,#interests li {
  436
+	display: inline;
388 437
 }
389 438
 
390  
-#skills li:after,
391  
-#interests li:after {
392  
-  content: ", ";
  439
+#skills li:after,#interests li:after {
  440
+	content: ", ";
393 441
 }
394 442
 
395  
-#skills li:last-child:after,
396  
-#interests li:last-child:after {
397  
-  content: "";
  443
+#skills li:last-child:after,#interests li:last-child:after {
  444
+	content: "";
398 445
 }
399 446
 
400 447
 /* Search Results */
401  
-
402 448
 #search_left {
403  
-  float: left;
  449
+	float: left;
404 450
 }
405 451
 
406 452
 #search_right {
407  
-  float: right;
  453
+	float: right;
408 454
 }
409 455
 
410 456
 .search_list {
411  
-  list-style: none;
  457
+	list-style: none;
412 458
 }
413 459
 
414 460
 .results {
  461
+	
415 462
 }
416 463
 
417  
-.result_pic, .bookmark_pic {
418  
-  float:left;
  464
+.result_pic,.bookmark_pic {
  465
+	float: left;
419 466
 }
  467
+
420 468
 .result_info {
421  
-  margin-left: 5px;
422  
-  font-size:18px; 
  469
+	margin-left: 5px;
  470
+	font-size: 18px;
423 471
 }
424 472
 
425 473
 h3.search_name {
426  
-  margin-left: 60px;
427  
-  color: #1B5187;
428  
-  text-decoration: underline;
429  
-  cursor: auto;
  474
+	margin-left: 60px;
  475
+	color: #1B5187;
  476
+	text-decoration: underline;
  477
+	cursor: auto;
430 478
 }
431 479
 
432 480
 h3.search_name:hover {
433  
-  color: #3D83A9;
434  
-  cursor: pointer;
  481
+	color: #3D83A9;
  482
+	cursor: pointer;
435 483
 }
436 484
 
437 485
 .result_info p {
438  
-  margin-left: 60px;
439  
-  margin-top: -15px;
  486
+	margin-left: 60px;
  487
+	margin-top: -15px;
440 488
 }
441 489
 
442 490
 .search_preview {
443 491
   position: relative;
444 492
   margin-top: 90px;
445  
-  margin-left: -25px;
  493
+  margin-left: -45px;
446 494
   margin-right: 20px;
447 495
   padding-bottom: 10px;
448 496
   padding-top: 10px;
@@ -454,6 +502,9 @@ h3.search_name:hover {
454 502
   box-shadow: 5px 5px 5px rgba(0,0,0,0.275), -5px -5px 5px rgba(0,0,0,0.275);
455 503
 */  -webkit-border-radius: 7px;
456 504
   -moz-border-radius: 7px;
  505
+  
  506
+  border-bottom-left-radius: 7px;
  507
+  -moz-border-radius-bottomleft: 7px;
457 508
   z-index: 50;
458 509
 }
459 510
 
@@ -481,7 +532,7 @@ h3.search_name:hover {
481 532
 }
482 533
 
483 534
 #search_preview_url a {
484  
-  text-decoration: none;
  535
+	text-decoration: none;
485 536
 }
486 537
 
487 538
 #search_preview_close {
@@ -504,17 +555,16 @@ h3.search_name:hover {
504 555
 }
505 556
 
506 557
 #preview_close_button:hover {
507  
-  cursor: pointer;
  558
+	cursor: pointer;
508 559
 }
509 560
 
510 561
 #preview_close_button {
511  
-  cursor: auto;
  562
+	cursor: auto;
512 563
 }
513 564
 
514 565
 #search_preview_image {
515  
-  background: #E2DED5;
516  
-  padding-right: 5px;
517  
-
  566
+	background: #E2DED5;
  567
+	padding-right: 5px;
518 568
 }
519 569
 
520 570
 #search_preview_inner_wrapper {
@@ -526,289 +576,304 @@ h3.search_name:hover {
526 576
   font-size: 90%;
527 577
 }
528 578
 
529  
-#search_preview_name,
530  
-#search_preview_title,
531  
-#search_preview_office {
532  
-  float: right;
533  
-  position: relative;
534  
-  width: 223px;
535  
-  left: -5px;
536  
-  margin-top: 0px;
537  
-  margin-bottom: 10px;
538  
-  text-align: right;
  579
+#search_preview_name,#search_preview_title,#search_preview_office {
  580
+	float: right;
  581
+	position: relative;
  582
+	width: 223px;
  583
+	left: -5px;
  584
+	margin-top: 0px;
  585
+	margin-bottom: 10px;
  586
+	text-align: right;
539 587
 }
540 588
 
541  
-
542 589
 /*End New CSS*/
543  
-
544 590
 #edit_pic {
545  
-	float:eft;
546  
-}
547  
-
548  
-  	#search_entire {
549  
-  		text-align:center;
550  
-  	}
551  
-  	
552  
-  	#advanced_search {
553  
-  		text-align:center;
554  
-  	}
555  
-  	
556  
-  	a#advanced:hover {
557  
-  		text-decoration:none;
558  
-  	}
559  
-  	
560  
-  	#nav_search_entire {
561  
-	  	float:right;
562  
-	  	width:10 px;
563  
-  	}
564  
-
565  
-  	#login_entire {
566  
-  		text-align: center;
567  
-  	}
568  
-  	
569  
-  	#query {
570  
-	  	font-weight:bold;
571  
-	  	font-style:italic;
572  
-  	}
573  
-  	
574  
-  	#bookmark_info {
575  
-	  	font-size:15px;
576  
-	  	position: relative;
577  
-	  	left: 120px;
578  
-  		bottom:110px;
579  
-  	}
580  
-  	
581  
-  	#error {
582  
-	  	text-align:center;
583  
-	  	color:red;
584  
-  	}
585  
-	.button_div { cursor: pointer; }
586  
-  	.entity_button { display:inline; }
587  
-  	.entity_title { display:inline; font-weight:bold; }
588  
-  	.people{margin-left: 40px;}
589  
-  	a.people_url:hover{text-decoration:none;}
590  
-  
  591
+	float: eft;
  592
+}
  593
+
  594
+#search_entire {
  595
+	text-align: center;
  596
+}
  597
+
  598
+#advanced_search {
  599
+	text-align: center;
  600
+}
  601
+
  602
+a#advanced:hover {
  603
+	text-decoration: none;
  604
+}
  605
+
  606
+#nav_search_entire {
  607
+	float: right;
  608
+	width: 10 px;
  609
+}
  610
+
  611
+#login_entire {
  612
+	text-align: center;
  613
+}
  614
+
  615
+#query {
  616
+	font-weight: bold;
  617
+	font-style: italic;
  618
+}
  619
+
  620
+#bookmark_info {
  621
+	font-size: 15px;
  622
+	position: relative;
  623
+	left: 120px;
  624
+	bottom: 110px;
  625
+}
  626
+
  627
+#error {
  628
+	text-align: center;
  629
+	color: red;
  630
+}
  631
+
  632
+.button_div {
  633
+	cursor: pointer;
  634
+}
591 635
 
592  
-.bookmark { padding:5px 0px 5px 3px; }
593  
-.bookmark_info { font-size:18px; padding-left:90px; }
  636
+.entity_button {
  637
+	display: inline;
  638
+}
594 639
 
  640
+.entity_title {
  641
+	display: inline;
  642
+	font-weight: bold;
  643
+}
  644
+
  645
+.people {
  646
+	margin-left: 40px;
  647
+}
  648
+
  649
+a.people_url:hover {
  650
+	text-decoration: none;
  651
+}
  652
+
  653
+.bookmark {
  654
+	padding: 5px 0px 5px 3px;
  655
+}
  656
+
  657
+.bookmark_info {
  658
+	font-size: 18px;
  659
+	padding-left: 90px;
  660
+}
595 661
 
596 662
 #main_center {
597  
-	margin-top:20px;
598  
-	margin-bottom:5px;
599  
-	text-align:center;
  663
+	margin-top: 20px;
  664
+	margin-bottom: 5px;
  665
+	text-align: center;
600 666
 }
601 667
 
602 668
 #edit_generalinfo p {
603  
-	font-weight:bold;