1
0
Prechádzať zdrojové kódy

增加科组长评分功能

ting.yin 6 rokov pred
rodič
commit
95d640b692
55 zmenil súbory, kde vykonal 12844 pridanie a 0 odobranie
  1. 94 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/Impl/TaskServiceImpl.java
  2. 4 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/TaskService.java
  3. 169 0
      stmms-web/src/main/java/cn/com/qmth/stmms/mark/MarkLeaderController.java
  4. 1 0
      stmms-web/src/main/webapp/WEB-INF/views/modules/exam/scoreList.jsp
  5. 97 0
      stmms-web/src/main/webapp/WEB-INF/views/modules/mark/markLeader.jsp
  6. 6443 0
      stmms-web/src/main/webapp/static/mark-leader/css/bootstrap.css
  7. 1168 0
      stmms-web/src/main/webapp/static/mark-leader/css/style.css
  8. 21 0
      stmms-web/src/main/webapp/static/mark-leader/image-popover.html
  9. BIN
      stmms-web/src/main/webapp/static/mark-leader/images/00001_F.jpg
  10. BIN
      stmms-web/src/main/webapp/static/mark-leader/images/background.jpg
  11. BIN
      stmms-web/src/main/webapp/static/mark-leader/images/button.png
  12. BIN
      stmms-web/src/main/webapp/static/mark-leader/images/close.png
  13. BIN
      stmms-web/src/main/webapp/static/mark-leader/images/down.png
  14. BIN
      stmms-web/src/main/webapp/static/mark-leader/images/hp-close.png
  15. BIN
      stmms-web/src/main/webapp/static/mark-leader/images/images-close.png
  16. BIN
      stmms-web/src/main/webapp/static/mark-leader/images/off.png
  17. BIN
      stmms-web/src/main/webapp/static/mark-leader/images/on.png
  18. BIN
      stmms-web/src/main/webapp/static/mark-leader/images/up.png
  19. BIN
      stmms-web/src/main/webapp/static/mark-leader/images/未标题-2.psd
  20. BIN
      stmms-web/src/main/webapp/static/mark-leader/img/glyphicons-halflings-white.png
  21. BIN
      stmms-web/src/main/webapp/static/mark-leader/img/glyphicons-halflings.png
  22. 308 0
      stmms-web/src/main/webapp/static/mark-leader/index-select.html
  23. 291 0
      stmms-web/src/main/webapp/static/mark-leader/index.html
  24. 4 0
      stmms-web/src/main/webapp/static/mark-leader/js/jquery-ui.min.js
  25. 3 0
      stmms-web/src/main/webapp/static/mark-leader/js/jquery.min.js
  26. 0 0
      stmms-web/src/main/webapp/static/mark-leader/js/jquery.min.map
  27. 7 0
      stmms-web/src/main/webapp/static/mark-leader/js/jquery.mousewheel.min.js
  28. 482 0
      stmms-web/src/main/webapp/static/mark-leader/js/json2.js
  29. 604 0
      stmms-web/src/main/webapp/static/mark-leader/js/mark-control.js
  30. 38 0
      stmms-web/src/main/webapp/static/mark-leader/js/modules/answer-view.js
  31. 59 0
      stmms-web/src/main/webapp/static/mark-leader/js/modules/arbitration-process.js
  32. 47 0
      stmms-web/src/main/webapp/static/mark-leader/js/modules/back-process.js
  33. 105 0
      stmms-web/src/main/webapp/static/mark-leader/js/modules/change-name.js
  34. 50 0
      stmms-web/src/main/webapp/static/mark-leader/js/modules/flash-image-view.js
  35. 81 0
      stmms-web/src/main/webapp/static/mark-leader/js/modules/header-mark-status.js
  36. 80 0
      stmms-web/src/main/webapp/static/mark-leader/js/modules/heart-beat.js
  37. 38 0
      stmms-web/src/main/webapp/static/mark-leader/js/modules/idle-process.js
  38. 87 0
      stmms-web/src/main/webapp/static/mark-leader/js/modules/image-builder.js
  39. 37 0
      stmms-web/src/main/webapp/static/mark-leader/js/modules/image-server-selector.js
  40. 690 0
      stmms-web/src/main/webapp/static/mark-leader/js/modules/mark-board.js
  41. 188 0
      stmms-web/src/main/webapp/static/mark-leader/js/modules/mark-history.js
  42. 147 0
      stmms-web/src/main/webapp/static/mark-leader/js/modules/mark-status.js
  43. 268 0
      stmms-web/src/main/webapp/static/mark-leader/js/modules/multi-image-view.js
  44. 38 0
      stmms-web/src/main/webapp/static/mark-leader/js/modules/paper-view.js
  45. 105 0
      stmms-web/src/main/webapp/static/mark-leader/js/modules/problem-process.js
  46. 42 0
      stmms-web/src/main/webapp/static/mark-leader/js/modules/sheet-view.js
  47. 250 0
      stmms-web/src/main/webapp/static/mark-leader/js/modules/single-image-view.js
  48. 88 0
      stmms-web/src/main/webapp/static/mark-leader/js/modules/tag-process.js
  49. 122 0
      stmms-web/src/main/webapp/static/mark-leader/js/modules/thumbnail.js
  50. 89 0
      stmms-web/src/main/webapp/static/mark-leader/js/modules/view-sidebar.js
  51. 88 0
      stmms-web/src/main/webapp/static/mark-leader/js/modules/warning-info.js
  52. 232 0
      stmms-web/src/main/webapp/static/mark-leader/js/task-control.js
  53. 19 0
      stmms-web/src/main/webapp/static/mark-leader/message-popover.html
  54. 19 0
      stmms-web/src/main/webapp/static/mark-leader/message-popover2.html
  55. 141 0
      stmms-web/src/main/webapp/static/mark-leader/xiaozhushou.html

+ 94 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/Impl/TaskServiceImpl.java

@@ -13,6 +13,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import cn.com.qmth.stmms.biz.campus.model.Campus;
+import cn.com.qmth.stmms.biz.campus.service.CampusService;
 import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
 import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
 import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
@@ -66,6 +68,9 @@ public class TaskServiceImpl implements TaskService {
     @Autowired
     private MarkSpecialTagService markSpecialTagService;
     
+    @Autowired
+    private CampusService campusService;
+    
     @Override
     public List<Task> findByQuery(MarkLibrarySearchQuery query) {
         List<Task> list = new LinkedList<Task>();
@@ -325,4 +330,93 @@ public class TaskServiceImpl implements TaskService {
         }
         return  specialTags;
     }
+
+	@Override
+	public Task build(Integer studentId) {
+        ExamStudent student = studentService.findById(studentId);
+        Task task = new Task();
+        task.setExist(true);
+        task.setStudentId(student.getExamNumber());
+        task.setLibraryId(studentId);
+        task.setMarkStepList(buildMarkStep(student));
+        Campus campus = campusService.findBySchoolAndName(student.getSchoolId(), student.getCampusName());
+        task.setPictureUrls(PictureUrlBuilder.getSliceUrls(student.getExamId(), campus.getId(),
+        		student.getSubjectCode(), student.getExamNumber(), 1, student.getSliceCount()-1));
+        task.setSheetUrls(PictureUrlBuilder.getSheetUrls(student.getExamId(), campus.getId(),
+        		student.getSubjectCode(), student.getExamNumber(), student.getSheetCount()));
+        task.setAnswerUrl(PictureUrlBuilder.getAnswerUrl(student.getExamId(), student.getSubjectCode()));
+        task.setPaperUrl(PictureUrlBuilder.getPaperUrl(student.getExamId(), student.getSubjectCode()));
+        task.setObjectiveScore(student != null ? student.getObjectiveScore() : 0);
+        task.setBack(true);
+        return task;
+    }
+	private List<MarkStepDTO> buildMarkStep(ExamStudent student) {
+        List<MarkStepDTO> list = new LinkedList<MarkStepDTO>();
+        List<ExamQuestion> sList = questionService.findByExamAndSubjectAndObjective(student.getExamId(),
+        		student.getSubjectCode(), false);
+        int number = 0;
+        for (ExamQuestion question : sList) {
+            number++;
+
+            MarkStepDTO step = new MarkStepDTO();
+            step.setQuestionNumber(question.getQuestionNumber());
+            step.setBlockId(question.getMainNumber());
+            step.setNumber(number);
+            step.setTitle(question.getMainTitle() + "-" + question.getSubNumber());
+            step.setTotalScore(question.getTotalScore());
+            step.setDefaultScore(0d);
+            step.setHasLevel(false);
+            step.setMax(question.getTotalScore());
+            step.setMin(0d);
+            step.setInterval(question.getIntervalScore());
+            step.setScoreList(question.getScoreListArray());
+            // 增加阅卷轨迹列表获取
+            addTrack(step, question, trackService.findByStudentId(student.getId()));
+            list.add(step);
+        }
+        return list;
+    }
+	
+	@Transactional
+	@Override
+	public boolean submitByStudent(Task task) {
+		if (task == null) {
+            return false;
+        }
+        try {
+        	List<MarkLibrary> libraries = libraryService.findByStudentId(task.getLibraryId());
+        	int start = 0 ;
+        	int end = 0;
+        	for (int i = 0; i < libraries.size(); i++) {
+        		MarkLibrary library = libraries.get(i);
+        		Task stepTask =new Task();
+        		stepTask.setProblem(task.isProblem());
+        		stepTask.setBack(task.isBack());
+        		stepTask.setLibraryId(library.getId());
+        		stepTask.setMarkId(task.getMarkId());
+        		stepTask.setTags(task.getTags());
+        		List<ExamQuestion> sList = questionService.findByExamAndSubjectAndObjectiveAndMainNumber(library.getExamId(),
+                        library.getSubjectCode(), false, library.getGroupNumber());
+        		if(start==end ){
+        			end = end + sList.size()*2-1;
+        		}else{
+        			start = end+1;
+        			end = start + sList.size()*2-1;
+        		}
+        		String scoreList = task.getScoreList().substring(start, end);
+        		stepTask.setScoreList(scoreList);
+        		String[] scores = scoreList.split(",");
+        		double totalScore = 0;
+        		for (String score : scores) {
+        			totalScore = totalScore + Double.parseDouble(score);
+				}
+         		stepTask.setTotalScore(totalScore);
+        		submitLibrary(stepTask);
+			}
+            return true;
+        } catch (Exception e) {
+            log.error("task submit faile", e);
+            return false;
+        }
+	}
 }

+ 4 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/TaskService.java

@@ -26,4 +26,8 @@ public interface TaskService {
     void clearCurrent(int examId, String subjectCode, int number);
 
     void clearCurrent(Marker marker);
+
+	Task build(Integer studentId);
+
+	boolean submitByStudent(Task task);
 }

+ 169 - 0
stmms-web/src/main/java/cn/com/qmth/stmms/mark/MarkLeaderController.java

@@ -0,0 +1,169 @@
+package cn.com.qmth.stmms.mark;
+
+import java.util.Date;
+
+import javax.servlet.http.HttpServletRequest;
+
+import net.sf.json.JSONObject;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.servlet.ModelAndView;
+
+import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
+import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
+import cn.com.qmth.stmms.biz.exam.model.Marker;
+import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
+import cn.com.qmth.stmms.biz.exam.service.ExamSubjectService;
+import cn.com.qmth.stmms.biz.exam.service.MarkerService;
+import cn.com.qmth.stmms.biz.exam.service.TagService;
+import cn.com.qmth.stmms.biz.mark.model.Task;
+import cn.com.qmth.stmms.biz.mark.service.MarkLibraryService;
+import cn.com.qmth.stmms.biz.mark.service.TaskService;
+import cn.com.qmth.stmms.common.controller.BaseController;
+import cn.com.qmth.stmms.common.domain.WebUser;
+import cn.com.qmth.stmms.common.enums.ExamSubjectStatus;
+import cn.com.qmth.stmms.common.utils.RequestUtils;
+
+@Controller
+@RequestMapping("/admin/mark/leader")
+public class MarkLeaderController extends BaseController {
+
+    private static Logger log = LoggerFactory.getLogger(MarkLeaderController.class);
+
+    @Autowired
+    private ExamSubjectService subjectService;
+
+    @Autowired
+    private MarkerService markerService;
+
+    @Autowired
+    private MarkLibraryService libraryService;
+
+    @Autowired
+    private TaskService taskService;
+
+    @Autowired
+    private TagService tagService;
+    
+    @Autowired
+    private ExamStudentService studentService;
+
+    @Value("${slice.image.server}")
+    private String sliceServer;
+
+    @Value("${sheet.image.server}")
+    private String sheetServer;
+
+    @Value("${card.server}")
+    private String cardServer;
+
+    @RequestMapping("/index")
+    public ModelAndView index(HttpServletRequest request, @RequestParam(value = "studentId") Integer studentId) {
+    	ExamStudent student= studentService.findById(studentId);
+    	Marker marker = new Marker();
+        marker.setExamId(student.getExamId());
+        marker.setSubjectCode(student.getSubjectCode());
+        ModelAndView modelAndView = new ModelAndView("modules/mark/markLeader");
+        preProcess(marker, studentId, modelAndView);
+        return modelAndView;
+    }
+
+    /**
+     * 进入评卷界面后的通用预处理
+     * 
+     * @param marker
+     * @param modelAndView
+     * @param modelAndView
+     */
+    private void preProcess(Marker marker,Integer studentId, ModelAndView modelAndView) {
+        modelAndView.addObject("sliceServer", sliceServer);
+        modelAndView.addObject("sheetServer", sheetServer);
+        modelAndView.addObject("cardServer", cardServer);
+        modelAndView.addObject("marker", marker);
+        modelAndView.addObject("studentId", studentId);
+        ExamStudent student= studentService.findById(studentId);
+        modelAndView.addObject("subject", subjectService.find(student.getExamId(), student.getSubjectCode()));
+    }
+
+    @RequestMapping("/status")
+    @ResponseBody
+    public JSONObject status(HttpServletRequest request,@RequestParam(value = "studentId",required = false) Integer studentId) {
+        JSONObject status = new JSONObject();
+        if(studentId==null){
+        	status.accumulate("valid", false);
+        }else{
+        	ExamStudent student= studentService.findById(studentId);
+        	ExamSubject subject = subjectService.find(student.getExamId(), student.getSubjectCode());
+        	if (subject == null || subject.getStatus() != ExamSubjectStatus.MARKING) {
+        		status.accumulate("valid", false);
+        		return status;
+        	}
+        	status.accumulate("valid", true);
+        }
+        return status;
+    }
+
+    @RequestMapping("/gettask")
+    @ResponseBody
+    public Task getTask(HttpServletRequest request, @RequestParam(value = "studentId", required = false) Integer studentId) {
+    	WebUser marker = RequestUtils.getWebUser(request);
+        Task task = getTask(marker,studentId);
+        if (studentId == null) {
+            task = new Task();
+            task.setExist(false);
+            task.setMessage("当前无评卷任务");
+        }
+        return task;
+    }
+
+    /**
+     * 设置任务通用属性
+     * 
+     * @param task
+     * @param marker
+     * @param stage
+     * @param count
+     * @param bmList
+     */
+    private void setTaskParameter(Task task, WebUser marker) {
+        task.setMarkId(marker.getId());
+        task.setSpent(new Date().getTime());
+    }
+
+    private Task getTask(WebUser marker,Integer studentId) {
+        Task task = taskService.build(studentId);
+		setTaskParameter(task, marker);
+        return task;
+    }
+
+    @RequestMapping(value = "/savetask", method = RequestMethod.POST)
+    @ResponseBody
+    public JSONObject saveTask(HttpServletRequest request, @RequestBody Task task) {
+        JSONObject result = new JSONObject();
+        try {
+            task.setSpent((new Date().getTime() - task.getSpent()) / 1000);
+            if (taskService.submitByStudent(task)) {
+                result.accumulate("success", true);
+                result.accumulate("status", status(request,null));
+            } else {
+                result.accumulate("success", false);
+            }
+        } catch (Exception e) {
+            log.error("MarkController-保存任务出错", e);
+            result.accumulate("success", false);
+        }
+        return result;
+    }
+
+
+
+}

+ 1 - 0
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/scoreList.jsp

@@ -193,6 +193,7 @@
 					<a class="sheet-link" href="##" data-sheet-url="${student.sheetUrlString}" data-answer-url="<c:if test="${student.answerUrl!=null}">${cardServer}${student.answerUrl}</c:if>" data-title="${student.examNumber}&nbsp;&nbsp;${student.name}&nbsp;&nbsp;客观总分${student.objectiveScoreString}&nbsp;&nbsp;主观总分${student.subjectiveScoreString}&nbsp;&nbsp;全卷总分${student.totalScoreString}">原图</a>
 					<a class="track-link" href="##" data-image-url="${ctx}/admin/exam/track?studentId=${student.id}" data-title="${student.examNumber}&nbsp;&nbsp;${student.name}">阅卷轨迹</a>
 					<a class="package-link" href="##" data-image-url="${student.packageUrlString}" data-title="${student.packageCode}">签到表</a>
+					<a target="_blank" href="${ctx}/admin/mark/leader/index?studentId=${student.id}">给分</a>
 				</td>
 			</tr>
 		</c:forEach>

+ 97 - 0
stmms-web/src/main/webapp/WEB-INF/views/modules/mark/markLeader.jsp

@@ -0,0 +1,97 @@
+<%@ page language="java" pageEncoding="utf-8"%>
+<%@ include file="/WEB-INF/views/include/taglib.jsp"%>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>讯飞云阅卷高校版</title>
+<link href="${ctxStatic}/mark-leader/css/bootstrap.css" rel="stylesheet" type="text/css" />
+<link href="${ctxStatic}/mark-leader/css/style.css" rel="stylesheet" type="text/css" />
+
+<script type="text/javascript" src="${ctxStatic}/mark-leader/js/json2.js"></script>
+
+<script type="text/javascript" src="${ctxStatic}/mark-leader/js/jquery.min.js"></script>
+<script type="text/javascript" src="${ctxStatic}/mark-leader/js/jquery-ui.min.js "></script>
+<script type="text/javascript" src="${ctxStatic}/mark-leader/js/jquery.mousewheel.min.js"></script>
+
+<script type="text/javascript" src="${ctxStatic}/iviewer/jquery.iviewer.js"></script>
+<link rel="stylesheet" href="${ctxStatic}/iviewer/jquery.iviewer.css" rel="stylesheet" />
+
+<script src="${ctxStatic}/perfect-scrollbar/min/perfect-scrollbar.min.js"></script>
+<link href="${ctxStatic}/perfect-scrollbar/min/perfect-scrollbar.min.css" rel="stylesheet">
+
+<script type="text/javascript" src="${ctxStatic}/mark-leader/js/mark-control.js"></script>
+<script type="text/javascript" src="${ctxStatic}/mark-leader/js/task-control.js"></script>
+<script type="text/javascript" src="${ctxStatic}/mark-leader/js/modules/answer-view.js"></script>
+<script type="text/javascript" src="${ctxStatic}/mark-leader/js/modules/paper-view.js"></script>
+<script type="text/javascript" src="${ctxStatic}/mark-leader/js/modules/sheet-view.js"></script>
+<script type="text/javascript" src="${ctxStatic}/mark-leader/js/modules/mark-board.js"></script>
+<script type="text/javascript" src="${ctxStatic}/mark-leader/js/modules/mark-history.js"></script>
+<script type="text/javascript" src="${ctxStatic}/mark-leader/js/modules/header-mark-status.js"></script>
+<script type="text/javascript" src="${ctxStatic}/mark-leader/js/modules/image-builder.js"></script>
+<script type="text/javascript" src="${ctxStatic}/mark-leader/js/modules/warning-info.js"></script>
+<script type="text/javascript" src="${ctxStatic}/mark-leader/js/modules/thumbnail.js"></script>
+<script type="text/javascript" src="${ctxStatic}/mark-leader/js/modules/single-image-view.js"></script>
+<script type="text/javascript" src="${ctxStatic}/mark-leader/js/modules/change-name.js"></script>
+<script type="text/javascript" src="${ctxStatic}/mark-leader/js/modules/tag-process.js"></script>
+<script type="text/javascript" src="${ctxStatic}/mark-leader/js/modules/view-sidebar.js"></script>
+</head>
+<body>
+	<div class="container-fluid" id="container"></div>
+	<script type="text/javascript">
+		$(document).ready(function() {
+			var mc = new MarkControl({
+				container : $('#container'),
+				staticServer : '${ctxStatic}',
+				imageServer : '${sliceServer}',
+				userName : '${web_user.name}',
+				logoutUrl: '${ctx}/mark/logout',
+				clearUrl: '${ctx}/admin/mark/leader/clear',
+				prefetchCount:'1',
+				modules : {
+					'single-image-view' : {},
+					'image-builder': {},
+					'header-mark-status': {
+						simple : false,
+						subjectName : '${subject.displayName}'
+					},
+// 					'mark-history':{
+// 						pageSize:10
+// 					},
+					'mark-board' : {
+						showScoreBoard : false,
+						autoSubmit : false,
+						needConfirm : false
+					},
+					'sheet-view' : {
+						server : '${sheetServer}'
+					},
+					'warning-info': {
+					},
+					'thumbnail':{
+					},
+					'change-name':{
+						url : '${ctx}/mark/change-name'
+					},
+					'tag-process':{
+						url : '${ctx}/mark/tags'
+					},
+					'view-sidebar':{
+						list: [
+							{title:'试卷',  url:'<c:if test="${subject.hasPaper==true}">${cardServer}${subject.paperUrl}</c:if>'},
+							{title:'答案',  url:'<c:if test="${subject.hasAnswer==true}">${cardServer}${subject.answerUrl}</c:if>'}
+						]
+					}
+				}
+			});
+			mc.start({
+				mode : 'loop',
+				statusUrl : '${ctx}/admin/mark/leader/status?studentId=${studentId}',
+				getUrl : '${ctx}/admin/mark/leader/gettask?studentId=${studentId}',
+				historyUrl : '${ctx}/admin/mark/leader/gethistory',
+				submitUrl : '${ctx}/admin/mark/leader/savetask',
+				clearUrl : '${ctx}/admin/mark/leader/clear'
+			});
+		});
+	</script>
+</body>
+</html>

+ 6443 - 0
stmms-web/src/main/webapp/static/mark-leader/css/bootstrap.css

@@ -0,0 +1,6443 @@
+/*!
+ * Bootstrap v2.3.1
+ *
+ * Copyright 2012 Twitter, Inc
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Designed and built with all the love in the world @twitter by @mdo and @fat.
+ */
+
+.clearfix {
+  *zoom: 1;
+}
+
+.clearfix:before,
+.clearfix:after {
+  display: table;
+  line-height: 0;
+  content: "";
+}
+
+.clearfix:after {
+  clear: both;
+}
+
+.hide-text {
+  font: 0/0 a;
+  color: transparent;
+  text-shadow: none;
+  background-color: transparent;
+  border: 0;
+}
+
+.input-block-level {
+  display: block;
+  width: 100%;
+  min-height: 30px;
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+          box-sizing: border-box;
+}
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+nav,
+section {
+  display: block;
+}
+
+audio,
+canvas,
+video {
+  display: inline-block;
+  *display: inline;
+  *zoom: 1;
+}
+
+audio:not([controls]) {
+  display: none;
+}
+
+html {
+  font-size: 100%;
+  -webkit-text-size-adjust: 100%;
+      -ms-text-size-adjust: 100%;
+}
+
+a:focus {
+  outline: thin dotted #333;
+  outline: 5px auto -webkit-focus-ring-color;
+  outline-offset: -2px;
+}
+
+a:hover,
+a:active {
+  outline: 0;
+}
+
+sub,
+sup {
+  position: relative;
+  font-size: 75%;
+  line-height: 0;
+  vertical-align: baseline;
+}
+
+sup {
+  top: -0.5em;
+}
+
+sub {
+  bottom: -0.25em;
+}
+
+img {
+  width: auto\9;
+  height: auto;
+  max-width: 100%;
+  vertical-align: middle;
+  border: 0;
+  -ms-interpolation-mode: bicubic;
+}
+
+#map_canvas img,
+.google-maps img {
+  max-width: none;
+}
+
+button,
+input,
+select,
+textarea {
+  margin: 0;
+  font-size: 100%;
+  vertical-align: middle;
+}
+
+button,
+input {
+  *overflow: visible;
+  line-height: normal;
+}
+
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+  padding: 0;
+  border: 0;
+}
+
+button,
+html input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+  cursor: pointer;
+  -webkit-appearance: button;
+}
+
+label,
+select,
+button,
+input[type="button"],
+input[type="reset"],
+input[type="submit"],
+input[type="radio"],
+input[type="checkbox"] {
+  cursor: pointer;
+}
+
+input[type="search"] {
+  -webkit-box-sizing: content-box;
+     -moz-box-sizing: content-box;
+          box-sizing: content-box;
+  -webkit-appearance: textfield;
+}
+
+input[type="search"]::-webkit-search-decoration,
+input[type="search"]::-webkit-search-cancel-button {
+  -webkit-appearance: none;
+}
+
+textarea {
+  overflow: auto;
+  vertical-align: top;
+}
+
+@media print {
+  * {
+    color: #000 !important;
+    text-shadow: none !important;
+    background: transparent !important;
+    box-shadow: none !important;
+  }
+  a,
+  a:visited {
+    text-decoration: underline;
+  }
+  a[href]:after {
+    content: " (" attr(href) ")";
+  }
+  abbr[title]:after {
+    content: " (" attr(title) ")";
+  }
+  .ir a:after,
+  a[href^="javascript:"]:after,
+  a[href^="#"]:after {
+    content: "";
+  }
+  pre,
+  blockquote {
+    border: 1px solid #999;
+    page-break-inside: avoid;
+  }
+  thead {
+    display: table-header-group;
+  }
+  tr,
+  img {
+    page-break-inside: avoid;
+  }
+  img {
+    max-width: 100% !important;
+  }
+  @page  {
+    margin: 0.5cm;
+  }
+  p,
+  h2,
+  h3 {
+    orphans: 3;
+    widows: 3;
+  }
+  h2,
+  h3 {
+    page-break-after: avoid;
+  }
+}
+
+body {
+  margin: 0;
+  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+  font-size: 14px;
+  line-height: 20px;
+  color: #333333;
+  background-color: #ffffff;
+}
+
+a {
+  color: #0088cc;
+  text-decoration: none;
+}
+
+a:hover,
+a:focus {
+  color: #005580;
+  text-decoration: underline;
+}
+
+.img-rounded {
+  -webkit-border-radius: 6px;
+     -moz-border-radius: 6px;
+          border-radius: 6px;
+}
+
+.img-polaroid {
+  padding: 4px;
+  background-color: #fff;
+  border: 1px solid #ccc;
+  border: 1px solid rgba(0, 0, 0, 0.2);
+  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
+     -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
+          box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
+}
+
+.img-circle {
+  -webkit-border-radius: 500px;
+     -moz-border-radius: 500px;
+          border-radius: 500px;
+}
+
+.row {
+  margin-left: -20px;
+  *zoom: 1;
+}
+
+.row:before,
+.row:after {
+  display: table;
+  line-height: 0;
+  content: "";
+}
+
+.row:after {
+  clear: both;
+}
+
+[class*="span"] {
+  float: left;
+  min-height: 1px;
+  margin-left: 20px;
+}
+
+.container,
+.navbar-static-top .container,
+.navbar-fixed-top .container,
+.navbar-fixed-bottom .container {
+  width: 940px;
+}
+
+.span12 {
+  width: 940px;
+}
+
+.span11 {
+  width: 860px;
+}
+
+.span10 {
+  width: 780px;
+}
+
+.span9 {
+  width: 700px;
+}
+
+.span8 {
+  width: 620px;
+}
+
+.span7 {
+  width: 540px;
+}
+
+.span6 {
+  width: 460px;
+}
+
+.span5 {
+  width: 380px;
+}
+
+.span4 {
+  width: 300px;
+}
+
+.span3 {
+  width: 220px;
+}
+
+.span2 {
+  width: 140px;
+}
+
+.span1 {
+  width: 100px;
+}
+
+.offset12 {
+  margin-left: 980px;
+}
+
+.offset11 {
+  margin-left: 900px;
+}
+
+.offset10 {
+  margin-left: 820px;
+}
+
+.offset9 {
+  margin-left: 740px;
+}
+
+.offset8 {
+  margin-left: 660px;
+}
+
+.offset7 {
+  margin-left: 580px;
+}
+
+.offset6 {
+  margin-left: 500px;
+}
+
+.offset5 {
+  margin-left: 420px;
+}
+
+.offset4 {
+  margin-left: 340px;
+}
+
+.offset3 {
+  margin-left: 260px;
+}
+
+.offset2 {
+  margin-left: 180px;
+}
+
+.offset1 {
+  margin-left: 100px;
+}
+
+.row-fluid {
+  width: 100%;
+  *zoom: 1;
+}
+
+.row-fluid:before,
+.row-fluid:after {
+  display: table;
+  line-height: 0;
+  content: "";
+}
+
+.row-fluid:after {
+  clear: both;
+}
+
+.row-fluid [class*="span"] {
+  display: block;
+  float: left;
+  width: 100%;
+  min-height: 30px;
+  margin-left:0px;
+/*  margin-left: 2.127659574468085%;
+*/  *margin-left: 2.074468085106383%;
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+          box-sizing: border-box;
+}
+
+.row-fluid [class*="span"]:first-child {
+  margin-left: 0;
+}
+
+.row-fluid .controls-row [class*="span"] + [class*="span"] {
+	margin-left:0px;
+/*  margin-left: 2.127659574468085%;
+*/}
+
+.row-fluid .span12 {
+  width: 100%;
+  *width: 99.94680851063829%;
+}
+
+.row-fluid .span11 {
+  width: 91.48936170212765%;
+  *width: 91.43617021276594%;
+}
+
+.row-fluid .span10 {
+	width:85.106%;
+/*  width: 82.97872340425532%;*/
+  *width: 82.92553191489361%;
+}
+
+.row-fluid .span9 {
+	 width:76.595%;
+/*  width: 74.46808510638297%;*/
+  *width: 74.41489361702126%;
+}
+
+.row-fluid .span8 {
+	 width:70.21%;
+/*  width: 65.95744680851064%;
+*/  *width: 65.90425531914893%;
+}
+
+.row-fluid .span7 {width:57%;
+/*  width: 57.44680851063829%;
+*/  *width: 57.39361702127659%;}
+
+.row-fluid .span6 {
+	width:49.96%;
+/*  width: 48.93617021276595%;
+*/  *width: 48.88297872340425%;
+}
+
+.row-fluid .span5 {
+	width:42.553%;
+/*  width: 40.42553191489362%;
+*/  *width: 40.37234042553192%;
+}
+
+.row-fluid .span4 {width: 31.914893617021278%;
+/*	width:34.042px;
+*//*  width: 31.914893617021278%;
+*/  *width: 31.861702127659576%;
+}
+
+.row-fluid .span3 {
+	width:25.531%;
+/*  width: 23.404255319148934%;
+*/  *width: 23.351063829787233%;
+}
+
+.row-fluid .span2 {
+  width: 14.893617021276595%;
+  *width: 14.840425531914894%;
+}
+
+.row-fluid .span1 {
+  width: 6.382978723404255%;
+  *width: 6.329787234042553%;
+}
+
+.row-fluid .offset12 {
+  margin-left: 104.25531914893617%;
+  *margin-left: 104.14893617021275%;
+}
+
+.row-fluid .offset12:first-child {
+  margin-left: 102.12765957446808%;
+  *margin-left: 102.02127659574467%;
+}
+
+.row-fluid .offset11 {
+  margin-left: 95.74468085106382%;
+  *margin-left: 95.6382978723404%;
+}
+
+.row-fluid .offset11:first-child {
+  margin-left: 93.61702127659574%;
+  *margin-left: 93.51063829787232%;
+}
+
+.row-fluid .offset10 {
+  margin-left: 87.23404255319149%;
+  *margin-left: 87.12765957446807%;
+}
+
+.row-fluid .offset10:first-child {
+  margin-left: 85.1063829787234%;
+  *margin-left: 84.99999999999999%;
+}
+
+.row-fluid .offset9 {
+  margin-left: 78.72340425531914%;
+  *margin-left: 78.61702127659572%;
+}
+
+.row-fluid .offset9:first-child {
+  margin-left: 76.59574468085106%;
+  *margin-left: 76.48936170212764%;
+}
+
+.row-fluid .offset8 {
+  margin-left: 70.2127659574468%;
+  *margin-left: 70.10638297872339%;
+}
+
+.row-fluid .offset8:first-child {
+  margin-left: 68.08510638297872%;
+  *margin-left: 67.9787234042553%;
+}
+
+.row-fluid .offset7 {
+  margin-left: 61.70212765957446%;
+  *margin-left: 61.59574468085106%;
+}
+
+.row-fluid .offset7:first-child {
+  margin-left: 59.574468085106375%;
+  *margin-left: 59.46808510638297%;
+}
+
+.row-fluid .offset6 {
+  margin-left: 53.191489361702125%;
+  *margin-left: 53.085106382978715%;
+}
+
+.row-fluid .offset6:first-child {
+  margin-left: 51.063829787234035%;
+  *margin-left: 50.95744680851063%;
+}
+
+.row-fluid .offset5 {
+  margin-left: 44.68085106382979%;
+  *margin-left: 44.57446808510638%;
+}
+
+.row-fluid .offset5:first-child {
+  margin-left: 42.5531914893617%;
+  *margin-left: 42.4468085106383%;
+}
+
+.row-fluid .offset4 {
+  margin-left: 36.170212765957444%;
+  *margin-left: 36.06382978723405%;
+}
+
+.row-fluid .offset4:first-child {
+  margin-left: 34.04255319148936%;
+  *margin-left: 33.93617021276596%;
+}
+
+.row-fluid .offset3 {
+  margin-left: 27.659574468085104%;
+  *margin-left: 27.5531914893617%;
+}
+
+.row-fluid .offset3:first-child {
+  margin-left: 25.53191489361702%;
+  *margin-left: 25.425531914893618%;
+}
+
+.row-fluid .offset2 {
+  margin-left: 19.148936170212764%;
+  *margin-left: 19.04255319148936%;
+}
+
+.row-fluid .offset2:first-child {
+  margin-left: 17.02127659574468%;
+  *margin-left: 16.914893617021278%;
+}
+
+.row-fluid .offset1 {
+  margin-left: 10.638297872340425%;
+  *margin-left: 10.53191489361702%;
+}
+
+.row-fluid .offset1:first-child {
+  margin-left: 8.51063829787234%;
+  *margin-left: 8.404255319148938%;
+}
+
+[class*="span"].hide,
+.row-fluid [class*="span"].hide {
+  display: none;
+}
+
+[class*="span"].pull-right,
+.row-fluid [class*="span"].pull-right {
+  float: right;
+}
+
+.container {
+  margin-right: auto;
+  margin-left: auto;
+  *zoom: 1;
+}
+
+.container:before,
+.container:after {
+  display: table;
+  line-height: 0;
+  content: "";
+}
+
+.container:after {
+  clear: both;
+}
+
+.container-fluid {
+/*  padding-right: 20px;
+  padding-left: 20px;*/
+  *zoom: 1;
+}
+
+.container-fluid:before,
+.container-fluid:after {
+  display: table;
+  line-height: 0;
+  content: "";
+}
+
+.container-fluid:after {
+  clear: both;
+}
+
+p {
+  margin: 0 0 10px;
+}
+
+.lead {
+  margin-bottom: 20px;
+  font-size: 21px;
+  font-weight: 200;
+  line-height: 30px;
+}
+
+small {
+  font-size: 85%;
+}
+
+strong {
+  font-weight: bold;
+}
+
+em {
+  font-style: italic;
+}
+
+cite {
+  font-style: normal;
+}
+
+.muted {
+  color: #999999;
+}
+
+a.muted:hover,
+a.muted:focus {
+  color: #808080;
+}
+
+.text-warning {
+  color: #c09853;
+}
+
+a.text-warning:hover,
+a.text-warning:focus {
+  color: #a47e3c;
+}
+
+.text-error {
+  color: #b94a48;
+  margin:0 5px;
+}
+
+a.text-error:hover,
+a.text-error:focus {
+  color: #953b39;
+}
+
+.text-info {
+  color: #3a87ad;
+}
+
+a.text-info:hover,
+a.text-info:focus {
+  color: #2d6987;
+}
+
+.text-success {
+  color: #468847;
+}
+
+a.text-success:hover,
+a.text-success:focus {
+  color: #356635;
+}
+
+.text-left {
+  text-align: left;
+}
+
+.text-right {
+  text-align: right;
+}
+
+.text-center {
+  text-align: center;
+}
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+  margin: 10px 0;
+  font-family: inherit;
+  font-weight: bold;
+  line-height: 20px;
+  color: inherit;
+  text-rendering: optimizelegibility;
+}
+
+h1 small,
+h2 small,
+h3 small,
+h4 small,
+h5 small,
+h6 small {
+  font-weight: normal;
+  line-height: 1;
+  color: #999999;
+}
+
+h1,
+h2,
+h3 {
+  line-height: 40px;
+}
+
+h1 {
+  font-size: 38.5px;
+}
+
+h2 {
+  font-size: 31.5px;
+}
+
+h3 {
+  font-size: 24.5px;
+}
+
+h4 {
+  font-size: 17.5px;
+}
+
+h5 {
+  font-size: 14px;
+}
+
+h6 {
+  font-size: 11.9px;
+}
+
+h1 small {
+  font-size: 24.5px;
+}
+
+h2 small {
+  font-size: 17.5px;
+}
+
+h3 small {
+  font-size: 14px;
+}
+
+h4 small {
+  font-size: 14px;
+}
+
+.page-header {
+  padding-bottom: 9px;
+  margin: 20px 0 30px;
+  border-bottom: 1px solid #eeeeee;
+}
+
+ul,
+ol {
+  padding: 0;
+  margin: 0 0 10px 25px;
+}
+
+ul ul,
+ul ol,
+ol ol,
+ol ul {
+  margin-bottom: 0;
+}
+
+li {
+  line-height: 20px;
+}
+
+ul.unstyled,
+ol.unstyled {
+  margin-left: 0;
+  list-style: none;
+}
+
+ul.inline,
+ol.inline {
+  margin-left: 0;
+  list-style: none;
+}
+
+ul.inline > li,
+ol.inline > li {
+  display: inline-block;
+  *display: inline;
+  padding-right: 5px;
+  padding-left: 5px;
+  *zoom: 1;
+}
+
+dl {
+  margin-bottom: 20px;
+}
+
+dt,
+dd {
+  line-height: 20px;
+}
+
+dt {
+  font-weight: bold;
+}
+
+dd {
+  margin-left: 10px;
+}
+
+.dl-horizontal {
+  *zoom: 1;
+}
+
+.dl-horizontal:before,
+.dl-horizontal:after {
+  display: table;
+  line-height: 0;
+  content: "";
+}
+
+.dl-horizontal:after {
+  clear: both;
+}
+
+.dl-horizontal dt {
+  float: left;
+  width: 160px;
+  overflow: hidden;
+  clear: left;
+  text-align: right;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+
+.dl-horizontal dd {
+  margin-left: 180px;
+}
+
+hr {
+  margin: 20px 0;
+  border: 0;
+  border-top: 1px solid #eeeeee;
+  border-bottom: 1px solid #ffffff;
+}
+
+abbr[title],
+abbr[data-original-title] {
+  cursor: help;
+  border-bottom: 1px dotted #999999;
+}
+
+abbr.initialism {
+  font-size: 90%;
+  text-transform: uppercase;
+}
+
+blockquote {
+  padding: 0 0 0 15px;
+  margin: 0 0 20px;
+  border-left: 5px solid #eeeeee;
+}
+
+blockquote p {
+  margin-bottom: 0;
+  font-size: 17.5px;
+  font-weight: 300;
+  line-height: 1.25;
+}
+
+blockquote small {
+  display: block;
+  line-height: 20px;
+  color: #999999;
+}
+
+blockquote small:before {
+  content: '\2014 \00A0';
+}
+
+blockquote.pull-right {
+  float: right;
+  padding-right: 15px;
+  padding-left: 0;
+  border-right: 5px solid #eeeeee;
+  border-left: 0;
+}
+
+blockquote.pull-right p,
+blockquote.pull-right small {
+  text-align: right;
+}
+
+blockquote.pull-right small:before {
+  content: '';
+}
+
+blockquote.pull-right small:after {
+  content: '\00A0 \2014';
+}
+
+q:before,
+q:after,
+blockquote:before,
+blockquote:after {
+  content: "";
+}
+
+address {
+  display: block;
+  margin-bottom: 20px;
+  font-style: normal;
+  line-height: 20px;
+}
+
+code,
+pre {
+  padding: 0 3px 2px;
+  font-family: Monaco, Menlo, Consolas, "Courier New", monospace;
+  font-size: 12px;
+  color: #333333;
+  -webkit-border-radius: 3px;
+     -moz-border-radius: 3px;
+          border-radius: 3px;
+}
+
+code {
+  padding: 2px 4px;
+  color: #d14;
+  white-space: nowrap;
+  background-color: #f7f7f9;
+  border: 1px solid #e1e1e8;
+}
+
+pre {
+  display: block;
+  padding: 9.5px;
+  margin: 0 0 10px;
+  font-size: 13px;
+  line-height: 20px;
+  word-break: break-all;
+  word-wrap: break-word;
+  white-space: pre;
+  white-space: pre-wrap;
+  background-color: #f5f5f5;
+  border: 1px solid #ccc;
+  border: 1px solid rgba(0, 0, 0, 0.15);
+/*  -webkit-border-radius: 4px;
+     -moz-border-radius: 4px;
+          border-radius: 4px;*/
+}
+
+pre.prettyprint {
+  margin-bottom: 20px;
+}
+
+pre code {
+  padding: 0;
+  color: inherit;
+  white-space: pre;
+  white-space: pre-wrap;
+  background-color: transparent;
+  border: 0;
+}
+
+.pre-scrollable {
+  max-height: 340px;
+  overflow-y: scroll;
+}
+
+form {
+  margin: 0 0 20px;
+}
+
+fieldset {
+  padding: 0;
+  margin: 0;
+  border: 0;
+}
+
+legend {
+  display: block;
+  width: 100%;
+  padding: 0;
+  margin-bottom: 20px;
+  font-size: 21px;
+  line-height: 40px;
+  color: #333333;
+  border: 0;
+  border-bottom: 1px solid #e5e5e5;
+}
+
+legend small {
+  font-size: 15px;
+  color: #999999;
+}
+
+label,
+input,
+button,
+select,
+textarea {
+  font-size: 14px;
+  font-weight: normal;
+  line-height: 20px;
+}
+
+input,
+button,
+select,
+textarea {
+  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+}
+
+label {
+  display: block;
+  margin-bottom: 5px;
+}
+
+select,
+textarea,
+input[type="text"],
+input[type="password"],
+input[type="datetime"],
+input[type="datetime-local"],
+input[type="date"],
+input[type="month"],
+input[type="time"],
+input[type="week"],
+input[type="number"],
+input[type="email"],
+input[type="url"],
+input[type="search"],
+input[type="tel"],
+input[type="color"],
+.uneditable-input {
+  display: inline-block;
+  height: 20px;
+  padding: 4px 6px;
+  margin-bottom: 0px;
+  font-size: 14px;
+  line-height: 20px;
+  color: #555555;
+/*  vertical-align: middle;
+  -webkit-border-radius: 4px;
+     -moz-border-radius: 4px;
+          border-radius: 4px;*/
+}
+
+input,
+textarea,
+.uneditable-input {
+  width: 206px;
+}
+
+textarea {
+  height: auto;
+}
+
+textarea,
+input[type="text"],
+input[type="password"],
+input[type="datetime"],
+input[type="datetime-local"],
+input[type="date"],
+input[type="month"],
+input[type="time"],
+input[type="week"],
+input[type="number"],
+input[type="email"],
+input[type="url"],
+input[type="search"],
+input[type="tel"],
+input[type="color"],
+.uneditable-input {
+  background-color: #ffffff;
+  border: 1px solid #cccccc;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+  -webkit-transition: border linear 0.2s, box-shadow linear 0.2s;
+     -moz-transition: border linear 0.2s, box-shadow linear 0.2s;
+       -o-transition: border linear 0.2s, box-shadow linear 0.2s;
+          transition: border linear 0.2s, box-shadow linear 0.2s;
+}
+
+textarea:focus,
+input[type="text"]:focus,
+input[type="password"]:focus,
+input[type="datetime"]:focus,
+input[type="datetime-local"]:focus,
+input[type="date"]:focus,
+input[type="month"]:focus,
+input[type="time"]:focus,
+input[type="week"]:focus,
+input[type="number"]:focus,
+input[type="email"]:focus,
+input[type="url"]:focus,
+input[type="search"]:focus,
+input[type="tel"]:focus,
+input[type="color"]:focus,
+.uneditable-input:focus {
+  border-color: rgba(82, 168, 236, 0.8);
+  outline: 0;
+  outline: thin dotted \9;
+  /* IE6-9 */
+
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
+     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
+}
+
+input[type="radio"],
+input[type="checkbox"] {
+  margin:5px;
+  margin-top: 1px \9;
+  *margin-top: 0;
+  line-height: normal;
+}
+
+input[type="file"],
+input[type="image"],
+input[type="submit"],
+input[type="reset"],
+input[type="button"],
+input[type="radio"],
+input[type="checkbox"] {
+  width: auto;
+}
+
+select,
+input[type="file"] {
+  height: 30px;
+  /* In IE7, the height of the select element cannot be changed by height, only font-size */
+
+  *margin-top: 4px;
+  /* For IE7, add top margin to align select with labels */
+
+  line-height: 30px;
+}
+
+select {
+  width: 220px;
+  background-color: #ffffff;
+  border: 1px solid #cccccc;
+}
+
+select[multiple],
+select[size] {
+  height: auto;
+}
+
+select:focus,
+input[type="file"]:focus,
+input[type="radio"]:focus,
+input[type="checkbox"]:focus {
+  outline: thin dotted #333;
+  outline: 5px auto -webkit-focus-ring-color;
+  outline-offset: -2px;
+}
+
+.uneditable-input,
+.uneditable-textarea {
+  color: #999999;
+  cursor: not-allowed;
+  background-color: #fcfcfc;
+  border-color: #cccccc;
+  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
+     -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
+          box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
+}
+
+.uneditable-input {
+  overflow: hidden;
+  white-space: nowrap;
+}
+
+.uneditable-textarea {
+  width: auto;
+  height: auto;
+}
+
+input:-moz-placeholder,
+textarea:-moz-placeholder {
+  color: #999999;
+}
+
+input:-ms-input-placeholder,
+textarea:-ms-input-placeholder {
+  color: #999999;
+}
+
+input::-webkit-input-placeholder,
+textarea::-webkit-input-placeholder {
+  color: #999999;
+}
+
+.radio,
+.checkbox {
+  min-height: 20px;
+  padding-left: 20px;
+}
+
+.checkbox-tab {
+  min-height: 20px;
+  padding-left: 20px;
+  margin-right:20px; float:left;
+}
+.radio input[type="radio"],
+.checkbox input[type="checkbox"] {
+  float: left;
+/*  margin-left: -20px;
+*/}
+
+.controls > .radio:first-child,
+.controls > .checkbox:first-child {
+  padding-top: 5px;
+}
+
+.radio.inline,
+.checkbox.inline {
+  display: inline-block;
+  padding-top: 5px;
+  margin-bottom: 0;
+  vertical-align: middle;
+}
+
+.radio.inline + .radio.inline,
+.checkbox.inline + .checkbox.inline {
+  margin-left: 10px;
+}
+
+.input-mini {
+  width: 60px;
+}
+
+.input-small {
+  width: 90px;
+}
+
+.input-medium {
+  width: 150px;
+}
+
+.input-large {
+  width: 210px;
+}
+
+.input-xlarge {
+  width: 270px;
+}
+
+.input-xxlarge {
+  width: 530px;
+}
+
+input[class*="span"],
+select[class*="span"],
+textarea[class*="span"],
+.uneditable-input[class*="span"],
+.row-fluid input[class*="span"],
+.row-fluid select[class*="span"],
+.row-fluid textarea[class*="span"],
+.row-fluid .uneditable-input[class*="span"] {
+  float: none;
+  margin-left: 0;
+}
+
+.input-append input[class*="span"],
+.input-append .uneditable-input[class*="span"],
+.input-prepend input[class*="span"],
+.input-prepend .uneditable-input[class*="span"],
+.row-fluid input[class*="span"],
+.row-fluid select[class*="span"],
+.row-fluid textarea[class*="span"],
+.row-fluid .uneditable-input[class*="span"],
+.row-fluid .input-prepend [class*="span"],
+.row-fluid .input-append [class*="span"] {
+  display: inline-block;
+}
+
+input,
+textarea,
+.uneditable-input {
+  margin-left: 0;
+}
+
+.controls-row [class*="span"] + [class*="span"] {
+  margin-left: 20px;
+}
+
+input.span12,
+textarea.span12,
+.uneditable-input.span12 {
+  width: 926px;
+}
+
+input.span11,
+textarea.span11,
+.uneditable-input.span11 {
+  width: 846px;
+}
+
+input.span10,
+textarea.span10,
+.uneditable-input.span10 {
+  width: 766px;
+}
+
+input.span9,
+textarea.span9,
+.uneditable-input.span9 {
+  width: 686px;
+}
+
+input.span8,
+textarea.span8,
+.uneditable-input.span8 {
+  width: 606px;
+}
+
+input.span7,
+textarea.span7,
+.uneditable-input.span7 {
+  width: 526px;
+}
+
+input.span6,
+textarea.span6,
+.uneditable-input.span6 {
+  width: 446px;
+}
+
+input.span5,
+textarea.span5,
+.uneditable-input.span5 {
+  width: 366px;
+}
+
+input.span4,
+textarea.span4,
+.uneditable-input.span4 {
+  width: 286px;
+}
+
+input.span3,
+textarea.span3,
+.uneditable-input.span3 {
+  width: 206px;
+}
+
+input.span2,
+textarea.span2,
+.uneditable-input.span2 {
+  width: 126px;
+}
+
+input.span1,
+textarea.span1,
+.uneditable-input.span1 {
+  width: 46px;
+}
+
+.controls-row {
+  *zoom: 1;
+}
+
+.controls-row:before,
+.controls-row:after {
+  display: table;
+  line-height: 0;
+  content: "";
+}
+
+.controls-row:after {
+  clear: both;
+}
+
+.controls-row [class*="span"],
+.row-fluid .controls-row [class*="span"] {
+  float: left;
+}
+
+.controls-row .checkbox[class*="span"],
+.controls-row .radio[class*="span"] {
+  padding-top: 5px;
+}
+
+input[disabled],
+select[disabled],
+textarea[disabled],
+input[readonly],
+select[readonly],
+textarea[readonly] {
+  cursor: not-allowed;
+  background-color: #eeeeee;
+}
+
+input[type="radio"][disabled],
+input[type="checkbox"][disabled],
+input[type="radio"][readonly],
+input[type="checkbox"][readonly] {
+  background-color: transparent;
+}
+
+.control-group.warning .control-label,
+.control-group.warning .help-block,
+.control-group.warning .help-inline {
+  color: #c09853;
+}
+
+.control-group.warning .checkbox,
+.control-group.warning .radio,
+.control-group.warning input,
+.control-group.warning select,
+.control-group.warning textarea {
+  color: #c09853;
+}
+
+.control-group.warning input,
+.control-group.warning select,
+.control-group.warning textarea {
+  border-color: #c09853;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+}
+
+.control-group.warning input:focus,
+.control-group.warning select:focus,
+.control-group.warning textarea:focus {
+  border-color: #a47e3c;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;
+     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;
+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;
+}
+
+.control-group.warning .input-prepend .add-on,
+.control-group.warning .input-append .add-on {
+  color: #c09853;
+  background-color: #fcf8e3;
+  border-color: #c09853;
+}
+
+.control-group.error .control-label,
+.control-group.error .help-block,
+.control-group.error .help-inline {
+  color: #b94a48;
+}
+
+.control-group.error .checkbox,
+.control-group.error .radio,
+.control-group.error input,
+.control-group.error select,
+.control-group.error textarea {
+  color: #b94a48;
+}
+
+.control-group.error input,
+.control-group.error select,
+.control-group.error textarea {
+  border-color: #b94a48;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+}
+
+.control-group.error input:focus,
+.control-group.error select:focus,
+.control-group.error textarea:focus {
+  border-color: #953b39;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;
+     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;
+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;
+}
+
+.control-group.error .input-prepend .add-on,
+.control-group.error .input-append .add-on {
+  color: #b94a48;
+  background-color: #f2dede;
+  border-color: #b94a48;
+}
+
+.control-group.success .control-label,
+.control-group.success .help-block,
+.control-group.success .help-inline {
+  color: #468847;
+}
+
+.control-group.success .checkbox,
+.control-group.success .radio,
+.control-group.success input,
+.control-group.success select,
+.control-group.success textarea {
+  color: #468847;
+}
+
+.control-group.success input,
+.control-group.success select,
+.control-group.success textarea {
+  border-color: #468847;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+}
+
+.control-group.success input:focus,
+.control-group.success select:focus,
+.control-group.success textarea:focus {
+  border-color: #356635;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;
+     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;
+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;
+}
+
+.control-group.success .input-prepend .add-on,
+.control-group.success .input-append .add-on {
+  color: #468847;
+  background-color: #dff0d8;
+  border-color: #468847;
+}
+
+.control-group.info .control-label,
+.control-group.info .help-block,
+.control-group.info .help-inline {
+  color: #3a87ad;
+}
+
+.control-group.info .checkbox,
+.control-group.info .radio,
+.control-group.info input,
+.control-group.info select,
+.control-group.info textarea {
+  color: #3a87ad;
+}
+
+.control-group.info input,
+.control-group.info select,
+.control-group.info textarea {
+  border-color: #3a87ad;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+}
+
+.control-group.info input:focus,
+.control-group.info select:focus,
+.control-group.info textarea:focus {
+  border-color: #2d6987;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3;
+     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3;
+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3;
+}
+
+.control-group.info .input-prepend .add-on,
+.control-group.info .input-append .add-on {
+  color: #3a87ad;
+  background-color: #d9edf7;
+  border-color: #3a87ad;
+}
+
+input:focus:invalid,
+textarea:focus:invalid,
+select:focus:invalid {
+  color: #b94a48;
+  border-color: #ee5f5b;
+}
+
+input:focus:invalid:focus,
+textarea:focus:invalid:focus,
+select:focus:invalid:focus {
+  border-color: #e9322d;
+  -webkit-box-shadow: 0 0 6px #f8b9b7;
+     -moz-box-shadow: 0 0 6px #f8b9b7;
+          box-shadow: 0 0 6px #f8b9b7;
+}
+
+.form-actions {
+  padding: 19px 20px 20px;
+  margin-top: 20px;
+  margin-bottom: 20px;
+  background-color: #f5f5f5;
+  border-top: 1px solid #e5e5e5;
+  *zoom: 1;
+}
+
+.form-actions:before,
+.form-actions:after {
+  display: table;
+  line-height: 0;
+  content: "";
+}
+
+.form-actions:after {
+  clear: both;
+}
+
+.help-block,
+.help-inline {
+  color: #595959;
+}
+
+.help-block {
+  display: block;
+  margin-bottom: 10px;
+}
+
+.help-inline {
+  display: inline-block;
+  *display: inline;
+  padding-left: 5px;
+  vertical-align: middle;
+  *zoom: 1;
+}
+
+.input-append,
+.input-prepend {
+  display: inline-block;
+  padding-left:15px;
+  margin: 10px;
+  font-size: 0;
+  white-space: nowrap;
+  vertical-align: middle;
+}
+
+.input-append input,
+.input-prepend input,
+.input-append select,
+.input-prepend select,
+.input-append .uneditable-input,
+.input-prepend .uneditable-input,
+.input-append .dropdown-menu,
+.input-prepend .dropdown-menu,
+.input-append .popover,
+.input-prepend .popover {
+  font-size: 14px;
+}
+
+.input-append input,
+.input-prepend input,
+.input-append select,
+.input-prepend select,
+.input-append .uneditable-input,
+.input-prepend .uneditable-input {
+  position: relative;
+  margin-bottom: 0;
+  *margin-left: 0;
+  vertical-align: top;
+  -webkit-border-radius: 0 4px 4px 0;
+     -moz-border-radius: 0 4px 4px 0;
+          border-radius: 0 4px 4px 0;
+}
+
+.input-append input:focus,
+.input-prepend input:focus,
+.input-append select:focus,
+.input-prepend select:focus,
+.input-append .uneditable-input:focus,
+.input-prepend .uneditable-input:focus {
+  z-index: 2;
+}
+
+.input-append .add-on,
+.input-prepend .add-on {
+  display: inline-block;
+  width: auto;
+  height: 20px;
+  min-width: 16px;
+  padding: 4px 5px;
+  font-size: 14px;
+  font-weight: normal;
+  line-height: 20px;
+  text-align: center;
+  text-shadow: 0 1px 0 #ffffff;
+  background-color: #eeeeee;
+  border: 1px solid #ccc;
+}
+
+.input-append .add-on,
+.input-prepend .add-on,
+.input-append .btn,
+.input-prepend .btn,
+.input-append .btn-group > .dropdown-toggle,
+.input-prepend .btn-group > .dropdown-toggle {
+  vertical-align: top;
+  -webkit-border-radius: 0;
+     -moz-border-radius: 0;
+          border-radius: 0;
+}
+
+.input-append .active,
+.input-prepend .active {
+  background-color: #a9dba9;
+  border-color: #46a546;
+}
+
+.input-prepend .add-on,
+.input-prepend .btn {
+  margin-right: -1px;
+}
+
+.input-prepend .add-on:first-child,
+.input-prepend .btn:first-child {
+  -webkit-border-radius: 4px 0 0 4px;
+     -moz-border-radius: 4px 0 0 4px;
+          border-radius: 4px 0 0 4px;
+}
+
+.input-append input,
+.input-append select,
+.input-append .uneditable-input {
+  -webkit-border-radius: 4px 0 0 4px;
+     -moz-border-radius: 4px 0 0 4px;
+          border-radius: 4px 0 0 4px;
+}
+
+.input-append input + .btn-group .btn:last-child,
+.input-append select + .btn-group .btn:last-child,
+.input-append .uneditable-input + .btn-group .btn:last-child {
+  -webkit-border-radius: 0 4px 4px 0;
+     -moz-border-radius: 0 4px 4px 0;
+          border-radius: 0 4px 4px 0;
+}
+
+.input-append .add-on,
+.input-append .btn,
+.input-append .btn-group {
+  margin-left: -1px;
+}
+
+.input-append .add-on:last-child,
+.input-append .btn:last-child,
+.input-append .btn-group:last-child > .dropdown-toggle {
+  -webkit-border-radius: 0 4px 4px 0;
+     -moz-border-radius: 0 4px 4px 0;
+          border-radius: 0 4px 4px 0;
+}
+
+.input-prepend.input-append input,
+.input-prepend.input-append select,
+.input-prepend.input-append .uneditable-input {
+  -webkit-border-radius: 0;
+     -moz-border-radius: 0;
+          border-radius: 0;
+}
+
+.input-prepend.input-append input + .btn-group .btn,
+.input-prepend.input-append select + .btn-group .btn,
+.input-prepend.input-append .uneditable-input + .btn-group .btn {
+  -webkit-border-radius: 0 4px 4px 0;
+     -moz-border-radius: 0 4px 4px 0;
+          border-radius: 0 4px 4px 0;
+}
+
+.input-prepend.input-append .add-on:first-child,
+.input-prepend.input-append .btn:first-child {
+  margin-right: -1px;
+  -webkit-border-radius: 4px 0 0 4px;
+     -moz-border-radius: 4px 0 0 4px;
+          border-radius: 4px 0 0 4px;
+}
+
+.input-prepend.input-append .add-on:last-child,
+.input-prepend.input-append .btn:last-child {
+  margin-left: -1px;
+  -webkit-border-radius: 0 4px 4px 0;
+     -moz-border-radius: 0 4px 4px 0;
+          border-radius: 0 4px 4px 0;
+}
+
+.input-prepend.input-append .btn-group:first-child {
+  margin-left: 0;
+}
+
+input.search-query {
+  padding-right: 14px;
+  padding-right: 4px \9;
+  padding-left: 14px;
+  padding-left: 4px \9;
+  /* IE7-8 doesn't have border-radius, so don't indent the padding */
+
+  margin-bottom: 0;
+  -webkit-border-radius: 15px;
+     -moz-border-radius: 15px;
+          border-radius: 15px;
+}
+
+/* Allow for input prepend/append in search forms */
+
+.form-search .input-append .search-query,
+.form-search .input-prepend .search-query {
+  -webkit-border-radius: 0;
+     -moz-border-radius: 0;
+          border-radius: 0;
+}
+
+.form-search .input-append .search-query {
+  -webkit-border-radius: 14px 0 0 14px;
+     -moz-border-radius: 14px 0 0 14px;
+          border-radius: 14px 0 0 14px;
+}
+
+.form-search .input-append .btn {
+  -webkit-border-radius: 0 14px 14px 0;
+     -moz-border-radius: 0 14px 14px 0;
+          border-radius: 0 14px 14px 0;
+}
+
+.form-search .input-prepend .search-query {
+  -webkit-border-radius: 0 14px 14px 0;
+     -moz-border-radius: 0 14px 14px 0;
+          border-radius: 0 14px 14px 0;
+}
+
+.form-search .input-prepend .btn {
+  -webkit-border-radius: 14px 0 0 14px;
+     -moz-border-radius: 14px 0 0 14px;
+          border-radius: 14px 0 0 14px;
+}
+.form-inline{ margin:5px;}
+.form-search input,
+.form-inline input,
+.form-horizontal input,
+.form-search textarea,
+.form-inline textarea,
+.form-horizontal textarea,
+.form-search select,
+.form-inline select,
+.form-horizontal select,
+.form-search .help-inline,
+.form-inline .help-inline,
+.form-horizontal .help-inline,
+.form-search .uneditable-input,
+.form-inline .uneditable-input,
+.form-horizontal .uneditable-input,
+.form-search .input-prepend,
+.form-inline .input-prepend,
+.form-horizontal .input-prepend,
+.form-search .input-append,
+.form-inline .input-append,
+.form-horizontal .input-append {
+  display: inline-block;
+  *display: inline;
+  margin-bottom: 0;
+  vertical-align: middle;
+  *zoom: 1;
+}
+
+.form-search .hide,
+.form-inline .hide,
+.form-horizontal .hide {
+  display: none;
+}
+
+.form-search label,
+.form-inline label,
+.form-search .btn-group,
+.form-inline .btn-group {
+  display: inline-block;
+}
+
+.form-search .input-append,
+.form-inline .input-append,
+.form-search .input-prepend,
+.form-inline .input-prepend {
+  margin-bottom: 0;
+}
+
+.form-search .radio,
+.form-search .checkbox,
+.form-inline .radio,
+.form-inline .checkbox {
+  padding-left: 0;
+  margin-bottom: 0;
+  vertical-align: middle;
+}
+
+.form-search .radio input[type="radio"],
+.form-search .checkbox input[type="checkbox"],
+.form-inline .radio input[type="radio"],
+.form-inline .checkbox input[type="checkbox"] {
+  float: left;
+  margin-right: 3px;
+  margin-left: 0;
+}
+
+.control-group {
+  margin-bottom: 10px;
+}
+
+legend + .control-group {
+  margin-top: 20px;
+  -webkit-margin-top-collapse: separate;
+}
+
+.form-horizontal .control-group {
+  margin-bottom: 20px;
+  *zoom: 1;
+}
+
+.form-horizontal .control-group:before,
+.form-horizontal .control-group:after {
+  display: table;
+  line-height: 0;
+  content: "";
+}
+
+.form-horizontal .control-group:after {
+  clear: both;
+}
+
+.form-horizontal .control-label {
+  float: left;
+  width: 160px;
+  padding-top: 5px;
+  text-align: right;
+}
+
+.form-horizontal .controls {
+  *display: inline-block;
+  *padding-left: 20px;
+  margin-left: 180px;
+  *margin-left: 0;
+}
+.controls-list{margin-left:0 !important;}
+.controls-list a{
+width:50px; height:28px;
+padding:0 3px;
+line-height:28px;
+display:block;
+text-align:center;
+margin:0px 10px 10px 0px;
+border:#c1c1c1 solid 1px;
+background-image: -moz-linear-gradient(top, #f9f9f7, #e8e8e5);
+background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f9f9f7), to(#e8e8e5));
+background-image: -webkit-linear-gradient(top, #f9f9f7, #e8e8e5);
+background-image: -o-linear-gradient(top, #f9f9f7, #e8e8e5);
+background-image: linear-gradient(to bottom, #f9f9f7, #e8e8e5);
+/*text-shadow:0px 0px 1px #fff;
+*/box-shadow:0 1px 0 rgba(255, 255, 255, 0.2) inset, 0 1px 2px rgba(0, 0, 0, 0.1);
+color:#333333;
+border-radius:2px;
+float:left;
+}
+.controls-list a:hover{
+border:#004898 solid 1px;
+background-image: -moz-linear-gradient(top, #0082cb, #006baa);
+background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0082cb), to(#006baa));
+background-image: -webkit-linear-gradient(top, #0082cb, #006baa);
+background-image: -o-linear-gradient(top, #0082cb, #006baa);
+background-image: linear-gradient(to bottom, #0082cb, #006baa);
+color:#fff;
+}
+.controls-list a.curr{
+border:#004898 solid 1px;
+background-image: -moz-linear-gradient(top, #0082cb, #006baa);
+background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0082cb), to(#006baa));
+background-image: -webkit-linear-gradient(top, #0082cb, #006baa);
+background-image: -o-linear-gradient(top, #0082cb, #006baa);
+background-image: linear-gradient(to bottom, #0082cb, #006baa);
+color:#fff;	
+}
+.form-horizontal .controls:first-child {
+  *padding-left: 180px;
+}
+
+.form-horizontal .help-block {
+  margin-bottom: 0;
+}
+
+.form-horizontal input + .help-block,
+.form-horizontal select + .help-block,
+.form-horizontal textarea + .help-block,
+.form-horizontal .uneditable-input + .help-block,
+.form-horizontal .input-prepend + .help-block,
+.form-horizontal .input-append + .help-block {
+  margin-top: 10px;
+}
+
+.form-horizontal .form-actions {
+  padding-left: 180px;
+}
+
+table {
+  max-width: 100%;
+  background-color: #c9d1d6;
+  border-spacing: 0;
+  text-align:center;
+  font-size:14px;
+}
+
+.table {
+  width: 100%;
+
+}
+.table th,
+.table td {
+  padding: 9px 6px;
+  line-height: 20px;
+  text-align: left;
+  border-top: 1px solid #5d6d7d;
+  color:#004260;
+}
+
+.table th {
+  font-weight: bold;
+  	font-size:15px;
+}
+
+.table thead th {
+	background:#455b71;
+	color:#fff;
+}
+
+.table caption + thead tr:first-child th,
+.table caption + thead tr:first-child td,
+.table colgroup + thead tr:first-child th,
+.table colgroup + thead tr:first-child td,
+.table thead:first-child tr:first-child th,
+.table thead:first-child tr:first-child td {
+  border-top: 0;
+}
+
+.table tbody + tbody {
+  border-top: 2px solid #dddddd;
+}
+
+.table .table {
+  background-color: #ffffff;
+}
+
+.table-condensed th,
+.table-condensed td {
+  padding: 4px 5px;
+}
+
+.table-bordered {
+  border: 1px solid #dddddd;
+  border-collapse: separate;
+  *border-collapse: collapse;
+  border-left: 0;
+/*  -webkit-border-radius: 4px;
+     -moz-border-radius: 4px;
+          border-radius: 4px;*/
+}
+
+.table-bordered th,
+.table-bordered td {
+  border-left: 1px solid #dddddd;
+}
+
+.table-bordered caption + thead tr:first-child th,
+.table-bordered caption + tbody tr:first-child th,
+.table-bordered caption + tbody tr:first-child td,
+.table-bordered colgroup + thead tr:first-child th,
+.table-bordered colgroup + tbody tr:first-child th,
+.table-bordered colgroup + tbody tr:first-child td,
+.table-bordered thead:first-child tr:first-child th,
+.table-bordered tbody:first-child tr:first-child th,
+.table-bordered tbody:first-child tr:first-child td {
+  border-top: 0;
+}
+
+.table-bordered thead:first-child tr:first-child > th:first-child,
+.table-bordered tbody:first-child tr:first-child > td:first-child,
+.table-bordered tbody:first-child tr:first-child > th:first-child {
+/*  -webkit-border-top-left-radius: 4px;
+          border-top-left-radius: 4px;
+  -moz-border-radius-topleft: 4px;*/
+}
+
+.table-bordered thead:first-child tr:first-child > th:last-child,
+.table-bordered tbody:first-child tr:first-child > td:last-child,
+.table-bordered tbody:first-child tr:first-child > th:last-child {
+/*  -webkit-border-top-right-radius: 4px;
+          border-top-right-radius: 4px;
+  -moz-border-radius-topright: 4px;*/
+}
+
+.table-bordered thead:last-child tr:last-child > th:first-child,
+.table-bordered tbody:last-child tr:last-child > td:first-child,
+.table-bordered tbody:last-child tr:last-child > th:first-child,
+.table-bordered tfoot:last-child tr:last-child > td:first-child,
+.table-bordered tfoot:last-child tr:last-child > th:first-child {
+/*  -webkit-border-bottom-left-radius: 4px;
+          border-bottom-left-radius: 4px;
+  -moz-border-radius-bottomleft: 4px;*/
+}
+
+.table-bordered thead:last-child tr:last-child > th:last-child,
+.table-bordered tbody:last-child tr:last-child > td:last-child,
+.table-bordered tbody:last-child tr:last-child > th:last-child,
+.table-bordered tfoot:last-child tr:last-child > td:last-child,
+.table-bordered tfoot:last-child tr:last-child > th:last-child {
+/*  -webkit-border-bottom-right-radius: 4px;
+          border-bottom-right-radius: 4px;
+  -moz-border-radius-bottomright: 4px;*/
+}
+
+.table-bordered tfoot + tbody:last-child tr:last-child td:first-child {
+  -webkit-border-bottom-left-radius: 0;
+          border-bottom-left-radius: 0;
+  -moz-border-radius-bottomleft: 0;
+}
+
+.table-bordered tfoot + tbody:last-child tr:last-child td:last-child {
+  -webkit-border-bottom-right-radius: 0;
+          border-bottom-right-radius: 0;
+  -moz-border-radius-bottomright: 0;
+}
+
+.table-bordered caption + thead tr:first-child th:first-child,
+.table-bordered caption + tbody tr:first-child td:first-child,
+.table-bordered colgroup + thead tr:first-child th:first-child,
+.table-bordered colgroup + tbody tr:first-child td:first-child {
+/*  -webkit-border-top-left-radius: 4px;
+          border-top-left-radius: 4px;
+  -moz-border-radius-topleft: 4px;*/
+}
+
+.table-bordered caption + thead tr:first-child th:last-child,
+.table-bordered caption + tbody tr:first-child td:last-child,
+.table-bordered colgroup + thead tr:first-child th:last-child,
+.table-bordered colgroup + tbody tr:first-child td:last-child {
+/*  -webkit-border-top-right-radius: 4px;
+          border-top-right-radius: 4px;
+  -moz-border-radius-topright: 4px;*/
+}
+
+.table-striped tbody > tr:nth-child(odd) > td,
+.table-striped tbody > tr:nth-child(odd) > th {
+  background-color: #f9f9f9;
+}
+
+.table-hover tbody tr:hover > td,
+.table-hover tbody tr:hover > th {
+  background-color: #a2b2bb;
+}
+.table-hover tbody tr.active > td,
+.table-hover tbody tr.active > th {
+  background-color: #a2b2bb;
+  color:#fff;
+}
+
+table td[class*="span"],
+table th[class*="span"],
+.row-fluid table td[class*="span"],
+.row-fluid table th[class*="span"] {
+  display: table-cell;
+  float: none;
+  margin-left: 0;
+}
+
+.table td.span1,
+.table th.span1 {
+  float: none;
+  width: 44px;
+  margin-left: 0;
+}
+
+.table td.span2,
+.table th.span2 {
+  float: none;
+  width: 124px;
+  margin-left: 0;
+}
+
+.table td.span3,
+.table th.span3 {
+  float: none;
+  width: 204px;
+  margin-left: 0;
+}
+
+.table td.span4,
+.table th.span4 {
+  float: none;
+  width: 284px;
+  margin-left: 0;
+}
+
+.table td.span5,
+.table th.span5 {
+  float: none;
+  width: 364px;
+  margin-left: 0;
+}
+
+.table td.span6,
+.table th.span6 {
+  float: none;
+  width: 444px;
+  margin-left: 0;
+}
+
+.table td.span7,
+.table th.span7 {
+  float: none;
+  width: 524px;
+  margin-left: 0;
+}
+
+.table td.span8,
+.table th.span8 {
+  float: none;
+  width: 604px;
+  margin-left: 0;
+}
+
+.table td.span9,
+.table th.span9 {
+  float: none;
+  width: 684px;
+  margin-left: 0;
+}
+
+.table td.span10,
+.table th.span10 {
+  float: none;
+  width: 764px;
+  margin-left: 0;
+}
+
+.table td.span11,
+.table th.span11 {
+  float: none;
+  width: 844px;
+  margin-left: 0;
+}
+
+.table td.span12,
+.table th.span12 {
+  float: none;
+  width: 924px;
+  margin-left: 0;
+}
+.table thead tr.gray > td {
+  background-color: #f00;
+}
+
+.table tbody tr.success > td {
+  background-color: #dff0d8;
+}
+
+.table tbody tr.error > td {
+  background-color: #f2dede;
+}
+
+.table tbody tr.warning > td {
+  background-color: #fefbee;
+}
+
+.table tbody tr.info > td {
+  background-color: #e4f5fe;
+}
+.table tbody tr.active > td {
+  background-color: #5a7686;
+}
+.table-hover thead tr.gray:hover > td {
+  background-color: #efeded;
+}
+
+.table-hover tbody tr.success:hover > td {
+  background-color: #d0e9c6;
+}
+
+.table-hover tbody tr.error:hover > td {
+  background-color: #ebcccc;
+}
+
+.table-hover tbody tr.warning:hover > td {
+  background-color: #faf2cc;
+}
+
+.table-hover tbody tr.info:hover > td {
+  background-color: #c4e3f3;
+}
+
+
+[class^="icon-"],
+[class*=" icon-"] {
+  display: inline-block;
+  width: 14px;
+  height: 14px;
+  margin-top: 1px;
+  *margin-right: .3em;
+  line-height: 14px;
+  vertical-align: text-top;
+  background-image: url("../img/glyphicons-halflings.png");
+  background-position: 14px 14px;
+  background-repeat: no-repeat;
+}
+
+/* White icons with optional class, or on hover/focus/active states of certain elements */
+
+.icon-white,
+.nav-pills > .active > a > [class^="icon-"],
+.nav-pills > .active > a > [class*=" icon-"],
+.nav-list > .active > a > [class^="icon-"],
+.nav-list > .active > a > [class*=" icon-"],
+.navbar-inverse .nav > .active > a > [class^="icon-"],
+.navbar-inverse .nav > .active > a > [class*=" icon-"],
+.dropdown-menu > li > a:hover > [class^="icon-"],
+.dropdown-menu > li > a:focus > [class^="icon-"],
+.dropdown-menu > li > a:hover > [class*=" icon-"],
+.dropdown-menu > li > a:focus > [class*=" icon-"],
+.dropdown-menu > .active > a > [class^="icon-"],
+.dropdown-menu > .active > a > [class*=" icon-"],
+.dropdown-submenu:hover > a > [class^="icon-"],
+.dropdown-submenu:focus > a > [class^="icon-"],
+.dropdown-submenu:hover > a > [class*=" icon-"],
+.dropdown-submenu:focus > a > [class*=" icon-"] {
+  background-image: url("../img/glyphicons-halflings-white.png");
+}
+
+
+.icon-red,
+.nav-pills > .active > a > [class^="icon-"],
+.nav-pills > .active > a > [class*=" icon-"],
+.nav-list > .active > a > [class^="icon-"],
+.nav-list > .active > a > [class*=" icon-"],
+.navbar-inverse .nav > .active > a > [class^="icon-"],
+.navbar-inverse .nav > .active > a > [class*=" icon-"],
+.dropdown-menu > li > a:hover > [class^="icon-"],
+.dropdown-menu > li > a:focus > [class^="icon-"],
+.dropdown-menu > li > a:hover > [class*=" icon-"],
+.dropdown-menu > li > a:focus > [class*=" icon-"],
+.dropdown-menu > .active > a > [class^="icon-"],
+.dropdown-menu > .active > a > [class*=" icon-"],
+.dropdown-submenu:hover > a > [class^="icon-"],
+.dropdown-submenu:focus > a > [class^="icon-"],
+.dropdown-submenu:hover > a > [class*=" icon-"],
+.dropdown-submenu:focus > a > [class*=" icon-"] {
+  background-image: url("../img/glyphicons-halflings-red.png");
+}
+
+
+.icon-glass {
+  background-position: 0      0;
+}
+
+.icon-music {
+  background-position: -24px 0;
+}
+
+.icon-search {
+  background-position: -48px 0;
+}
+
+.icon-envelope {
+  background-position: -72px 0;
+}
+
+.icon-heart {
+  background-position: -96px 0;
+}
+
+.icon-star {
+  background-position: -120px 0;
+}
+
+.icon-star-empty {
+  background-position: -144px 0;
+}
+
+.icon-user {
+  background-position: -168px 0;
+}
+
+.icon-film {
+  background-position: -192px 0;
+}
+
+.icon-th-large {
+  background-position: -216px 0;
+}
+
+.icon-th {
+  background-position: -240px 0;
+}
+
+.icon-th-list {
+  background-position: -264px 0;
+}
+
+.icon-ok {
+  background-position: -288px 0;
+}
+
+.icon-remove {
+  background-position: -312px 0;
+}
+
+.icon-zoom-in {
+  background-position: -336px 0;
+}
+
+.icon-zoom-out {
+  background-position: -360px 0;
+}
+
+.icon-off {
+  background-position: -384px 0;
+}
+
+.icon-signal {
+  background-position: -408px 0;
+}
+
+.icon-cog {
+  background-position: -432px 0;
+}
+
+.icon-trash {
+  background-position: -456px 0;
+}
+
+.icon-home {
+  background-position: 0 -24px;
+}
+
+.icon-file {
+  background-position: -24px -24px;
+}
+
+.icon-time {
+  background-position: -48px -24px;
+}
+
+.icon-road {
+  background-position: -72px -24px;
+}
+
+.icon-download-alt {
+  background-position: -96px -24px;
+}
+
+.icon-download {
+  background-position: -120px -24px;
+}
+
+.icon-upload {
+  background-position: -144px -24px;
+}
+
+.icon-inbox {
+  background-position: -168px -24px;
+}
+
+.icon-play-circle {
+  background-position: -192px -24px;
+}
+
+.icon-repeat {
+  background-position: -216px -24px;
+}
+
+.icon-refresh {
+  background-position: -240px -24px;
+}
+
+.icon-list-alt {
+  background-position: -264px -24px;
+}
+
+.icon-lock {
+  background-position: -287px -24px;
+}
+
+.icon-flag {
+  background-position: -312px -24px;
+}
+
+.icon-headphones {
+  background-position: -336px -24px;
+}
+
+.icon-volume-off {
+  background-position: -360px -24px;
+}
+
+.icon-volume-down {
+  background-position: -384px -24px;
+}
+
+.icon-volume-up {
+  background-position: -408px -24px;
+}
+
+.icon-qrcode {
+  background-position: -432px -24px;
+}
+
+.icon-barcode {
+  background-position: -456px -24px;
+}
+
+.icon-tag {
+  background-position: 0 -48px;
+}
+
+.icon-tags {
+  background-position: -25px -48px;
+}
+
+.icon-book {
+  background-position: -48px -48px;
+}
+
+.icon-bookmark {
+  background-position: -72px -48px;
+}
+
+.icon-print {
+  background-position: -96px -48px;
+}
+
+.icon-camera {
+  background-position: -120px -48px;
+}
+
+.icon-font {
+  background-position: -144px -48px;
+}
+
+.icon-bold {
+  background-position: -167px -48px;
+}
+
+.icon-italic {
+  background-position: -192px -48px;
+}
+
+.icon-text-height {
+  background-position: -216px -48px;
+}
+
+.icon-text-width {
+  background-position: -240px -48px;
+}
+
+.icon-align-left {
+  background-position: -264px -48px;
+}
+
+.icon-align-center {
+  background-position: -288px -48px;
+}
+
+.icon-align-right {
+  background-position: -312px -48px;
+}
+
+.icon-align-justify {
+  background-position: -336px -48px;
+}
+
+.icon-list {
+  background-position: -360px -48px;
+}
+
+.icon-indent-left {
+  background-position: -384px -48px;
+}
+
+.icon-indent-right {
+  background-position: -408px -48px;
+}
+
+.icon-facetime-video {
+  background-position: -432px -48px;
+}
+
+.icon-picture {
+  background-position: -456px -48px;
+}
+
+.icon-pencil {
+  background-position: 0 -72px;
+}
+
+.icon-map-marker {
+  background-position: -24px -72px;
+}
+
+.icon-adjust {
+  background-position: -48px -72px;
+}
+
+.icon-tint {
+  background-position: -72px -72px;
+}
+
+.icon-edit {
+  background-position: -96px -72px;
+}
+
+.icon-share {
+  background-position: -120px -72px;
+}
+
+.icon-check {
+  background-position: -144px -72px;
+}
+
+.icon-move {
+  background-position: -168px -72px;
+}
+
+.icon-step-backward {
+  background-position: -192px -72px;
+}
+
+.icon-fast-backward {
+  background-position: -216px -72px;
+}
+
+.icon-backward {
+  background-position: -240px -72px;
+}
+
+.icon-play {
+  background-position: -264px -72px;
+}
+
+.icon-pause {
+  background-position: -288px -72px;
+}
+
+.icon-stop {
+  background-position: -312px -72px;
+}
+
+.icon-forward {
+  background-position: -336px -72px;
+}
+
+.icon-fast-forward {
+  background-position: -360px -72px;
+}
+
+.icon-step-forward {
+  background-position: -384px -72px;
+}
+
+.icon-eject {
+  background-position: -408px -72px;
+}
+
+.icon-chevron-left {
+  background-position: -432px -72px;
+}
+
+.icon-chevron-right {
+  background-position: -456px -72px;
+}
+
+.icon-plus-sign {
+  background-position: 0 -96px;
+}
+
+.icon-minus-sign {
+  background-position: -24px -96px;
+}
+
+.icon-remove-sign {
+  background-position: -48px -96px;
+}
+
+.icon-ok-sign {
+  background-position: -72px -96px;
+}
+
+.icon-question-sign {
+  background-position: -96px -96px;
+}
+
+.icon-info-sign {
+  background-position: -120px -96px;
+}
+
+.icon-screenshot {
+  background-position: -144px -96px;
+}
+
+.icon-remove-circle {
+  background-position: -168px -96px;
+}
+
+.icon-ok-circle {
+  background-position: -192px -96px;
+}
+
+.icon-ban-circle {
+  background-position: -216px -96px;
+}
+
+.icon-arrow-left {
+  background-position: -240px -96px;
+}
+
+.icon-arrow-right {
+  background-position: -264px -96px;
+}
+
+.icon-arrow-up {
+  background-position: -289px -96px;
+}
+
+.icon-arrow-down {
+  background-position: -312px -96px;
+}
+
+.icon-share-alt {
+  background-position: -336px -96px;
+}
+
+.icon-resize-full {
+  background-position: -360px -96px;
+}
+
+.icon-resize-small {
+  background-position: -384px -96px;
+}
+
+.icon-plus {
+  background-position: -408px -96px;
+}
+
+.icon-minus {
+  background-position: -433px -96px;
+}
+
+.icon-asterisk {
+  background-position: -456px -96px;
+}
+
+.icon-exclamation-sign {
+  background-position: 0 -120px;
+}
+
+.icon-gift {
+  background-position: -24px -120px;
+}
+
+.icon-leaf {
+  background-position: -48px -120px;
+}
+
+.icon-fire {
+  background-position: -72px -120px;
+}
+
+.icon-eye-open {
+  background-position: -96px -120px;
+}
+
+.icon-eye-close {
+  background-position: -120px -120px;
+}
+
+.icon-warning-sign {
+  background-position: -144px -120px;
+}
+
+.icon-plane {
+  background-position: -168px -120px;
+}
+
+.icon-calendar {
+  background-position: -192px -120px;
+}
+
+.icon-random {
+  width: 16px;
+  background-position: -216px -120px;
+}
+
+.icon-comment {
+  background-position: -240px -120px;
+}
+
+.icon-magnet {
+  background-position: -264px -120px;
+}
+
+.icon-chevron-up {
+  background-position: -288px -120px;
+}
+
+.icon-chevron-down {
+  background-position: -313px -119px;
+}
+
+.icon-retweet {
+  background-position: -336px -120px;
+}
+
+.icon-shopping-cart {
+  background-position: -360px -120px;
+}
+
+.icon-folder-close {
+  width: 16px;
+  background-position: -384px -120px;
+}
+
+.icon-folder-open {
+  width: 16px;
+  background-position: -408px -120px;
+}
+
+.icon-resize-vertical {
+  background-position: -432px -119px;
+}
+
+.icon-resize-horizontal {
+  background-position: -456px -118px;
+}
+
+.icon-hdd {
+  background-position: 0 -144px;
+}
+
+.icon-bullhorn {
+  background-position: -24px -144px;
+}
+
+.icon-bell {
+  background-position: -48px -144px;
+}
+
+.icon-certificate {
+  background-position: -72px -144px;
+}
+
+.icon-thumbs-up {
+  background-position: -96px -144px;
+}
+
+.icon-thumbs-down {
+  background-position: -120px -144px;
+}
+
+.icon-hand-right {
+  background-position: -144px -144px;
+}
+
+.icon-hand-left {
+  background-position: -168px -144px;
+}
+
+.icon-hand-up {
+  background-position: -192px -144px;
+}
+
+.icon-hand-down {
+  background-position: -216px -144px;
+}
+
+.icon-circle-arrow-right {
+  background-position: -240px -144px;
+}
+
+.icon-circle-arrow-left {
+  background-position: -264px -144px;
+}
+
+.icon-circle-arrow-up {
+  background-position: -288px -144px;
+}
+
+.icon-circle-arrow-down {
+  background-position: -312px -144px;
+}
+
+.icon-globe {
+  background-position: -336px -144px;
+}
+
+.icon-wrench {
+  background-position: -360px -144px;
+}
+
+.icon-tasks {
+  background-position: -384px -144px;
+}
+
+.icon-filter {
+  background-position: -408px -144px;
+}
+
+.icon-briefcase {
+  background-position: -432px -144px;
+}
+
+.icon-fullscreen {
+  background-position: -456px -144px;
+}
+
+.dropup,
+.dropdown {
+  position: relative;
+}
+
+.dropdown-toggle {
+  *margin-bottom: -3px;
+}
+
+.dropdown-toggle:active,
+.open .dropdown-toggle {
+  outline: 0;
+}
+
+.caret {
+  display: inline-block;
+  width: 0;
+  height: 0;
+  vertical-align: top;
+  border-top: 4px solid #000000;
+  border-right: 4px solid transparent;
+  border-left: 4px solid transparent;
+  content: "";
+}
+
+.dropdown .caret {
+  margin-top: 8px;
+  margin-left: 2px;
+}
+
+.dropdown-menu {
+  position: absolute;
+  top: 100%;
+  left: 0;
+  z-index:9999;
+  display: none;
+  float: left;
+  min-width: 160px;
+  padding: 5px 0;
+  margin: 2px 0 0;
+  list-style: none;
+  background-color: #ffffff;
+  border: 1px solid #ccc;
+  border: 1px solid rgba(0, 0, 0, 0.2);
+  *border-right-width: 2px;
+  *border-bottom-width: 2px;
+/*  -webkit-border-radius: 6px;
+     -moz-border-radius: 6px;
+          border-radius: 6px;*/
+  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+     -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+          box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+  -webkit-background-clip: padding-box;
+     -moz-background-clip: padding;
+          background-clip: padding-box;
+}
+
+.dropdown-menu.pull-right {
+  right: 0;
+  left: auto;
+}
+
+.dropdown-menu .divider {
+  *width: 100%;
+  height: 1px;
+  margin: 9px 1px;
+  *margin: -5px 0 5px;
+  overflow: hidden;
+  background-color: #e5e5e5;
+  border-bottom: 1px solid #ffffff;
+}
+
+.dropdown-menu > li > a {
+  display: block;
+  padding: 3px 20px;
+  clear: both;
+  font-weight: normal;
+  line-height: 20px;
+  color: #333333;
+  white-space: nowrap;
+}
+
+.dropdown-menu > li > a:hover,
+.dropdown-menu > li > a:focus,
+.dropdown-submenu:hover > a,
+.dropdown-submenu:focus > a {
+  color: #ffffff;
+  text-decoration: none;
+  background-color: #0081c2;
+  background-image: -moz-linear-gradient(top, #0088cc, #0077b3);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3));
+  background-image: -webkit-linear-gradient(top, #0088cc, #0077b3);
+  background-image: -o-linear-gradient(top, #0088cc, #0077b3);
+  background-image: linear-gradient(to bottom, #0088cc, #0077b3);
+  background-repeat: repeat-x;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);
+}
+
+.dropdown-menu > .active > a,
+.dropdown-menu > .active > a:hover,
+.dropdown-menu > .active > a:focus {
+  color: #ffffff;
+  text-decoration: none;
+  background-color: #0081c2;
+  background-image: -moz-linear-gradient(top, #0088cc, #0077b3);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3));
+  background-image: -webkit-linear-gradient(top, #0088cc, #0077b3);
+  background-image: -o-linear-gradient(top, #0088cc, #0077b3);
+  background-image: linear-gradient(to bottom, #0088cc, #0077b3);
+  background-repeat: repeat-x;
+  outline: 0;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);
+}
+
+.dropdown-menu > .disabled > a,
+.dropdown-menu > .disabled > a:hover,
+.dropdown-menu > .disabled > a:focus {
+  color: #999999;
+}
+
+.dropdown-menu > .disabled > a:hover,
+.dropdown-menu > .disabled > a:focus {
+  text-decoration: none;
+  cursor: default;
+  background-color: transparent;
+  background-image: none;
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+}
+
+.open {
+  *z-index: 1000;
+}
+
+.open > .dropdown-menu {
+  display: block;
+}
+
+.pull-right > .dropdown-menu {
+  right: 0;
+  left: auto;
+}
+
+.dropup .caret,
+.navbar-fixed-bottom .dropdown .caret {
+  border-top: 0;
+  border-bottom: 4px solid #000000;
+  content: "";
+}
+
+.dropup .dropdown-menu,
+.navbar-fixed-bottom .dropdown .dropdown-menu {
+  top: auto;
+  bottom: 100%;
+  margin-bottom: 1px;
+}
+
+.dropdown-submenu {
+  position: relative;
+}
+
+.dropdown-submenu > .dropdown-menu {
+  top: 0;
+  left: 100%;
+  margin-top: -6px;
+  margin-left: -1px;
+  -webkit-border-radius: 0 6px 6px 6px;
+     -moz-border-radius: 0 6px 6px 6px;
+          border-radius: 0 6px 6px 6px;
+}
+
+.dropdown-submenu:hover > .dropdown-menu {
+  display: block;
+}
+
+.dropup .dropdown-submenu > .dropdown-menu {
+  top: auto;
+  bottom: 0;
+  margin-top: 0;
+  margin-bottom: -2px;
+  -webkit-border-radius: 5px 5px 5px 0;
+     -moz-border-radius: 5px 5px 5px 0;
+          border-radius: 5px 5px 5px 0;
+}
+
+.dropdown-submenu > a:after {
+  display: block;
+  float: right;
+  width: 0;
+  height: 0;
+  margin-top: 5px;
+  margin-right: -10px;
+  border-color: transparent;
+  border-left-color: #cccccc;
+  border-style: solid;
+  border-width: 5px 0 5px 5px;
+  content: " ";
+}
+
+.dropdown-submenu:hover > a:after {
+  border-left-color: #ffffff;
+}
+
+.dropdown-submenu.pull-left {
+  float: none;
+}
+
+.dropdown-submenu.pull-left > .dropdown-menu {
+  left: -100%;
+  margin-left: 10px;
+  -webkit-border-radius: 6px 0 6px 6px;
+     -moz-border-radius: 6px 0 6px 6px;
+          border-radius: 6px 0 6px 6px;
+}
+
+.dropdown .dropdown-menu .nav-header {
+  padding-right: 20px;
+  padding-left: 20px;
+}
+
+.typeahead {
+  z-index: 1051;
+  margin-top: 2px;
+/*  -webkit-border-radius: 4px;
+     -moz-border-radius: 4px;
+          border-radius: 4px;*/
+}
+
+.well {
+  min-height: 20px;
+  padding: 19px;
+  margin-bottom: 20px;
+  background-color: #f5f5f5;
+  border: 1px solid #e3e3e3;
+/*  -webkit-border-radius: 4px;
+     -moz-border-radius: 4px;
+          border-radius: 4px;*/
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
+     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
+}
+
+.well blockquote {
+  border-color: #ddd;
+  border-color: rgba(0, 0, 0, 0.15);
+}
+
+.well-large {
+  padding: 24px;
+  -webkit-border-radius: 6px;
+     -moz-border-radius: 6px;
+          border-radius: 6px;
+}
+
+.well-small {
+  padding: 9px;
+  -webkit-border-radius: 3px;
+     -moz-border-radius: 3px;
+          border-radius: 3px;
+}
+
+.fade {
+  opacity: 0;
+  -webkit-transition: opacity 0.15s linear;
+     -moz-transition: opacity 0.15s linear;
+       -o-transition: opacity 0.15s linear;
+          transition: opacity 0.15s linear;
+}
+
+.fade.in {
+  opacity: 1;
+}
+
+.collapse {
+  position: relative;
+  height: 0;
+  overflow: hidden;
+  -webkit-transition: height 0.35s ease;
+     -moz-transition: height 0.35s ease;
+       -o-transition: height 0.35s ease;
+          transition: height 0.35s ease;
+}
+
+.collapse.in {
+  height: auto;
+}
+
+.close {
+  float: right;
+  font-size: 13px;
+  font-weight: bold;
+  line-height: 20px;
+  color: #000000;
+  text-shadow: 0 1px 0 #ffffff;
+  opacity: 0.2;
+  filter: alpha(opacity=20);
+}
+
+.close:hover,
+.close:focus {
+  color: #000000;
+  text-decoration: none;
+  cursor: pointer;
+  opacity: 0.4;
+  filter: alpha(opacity=40);
+}
+
+button.close {
+  padding: 0;
+  cursor: pointer;
+  background: transparent;
+  border: 0;
+  -webkit-appearance: none;
+}
+
+.btn {
+  display: inline-block;
+  *display: inline;
+  padding: 4px 12px;
+  *margin-left: .3em;
+  font-size: 14px;
+  line-height: 20px;
+  color: #333333;
+  text-align: center;
+  text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
+  vertical-align: middle;
+  cursor: pointer;
+  background-color: #f5f5f5;
+  *background-color: #e6e6e6;
+  background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));
+  background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6);
+  background-image: -o-linear-gradient(top, #ffffff, #e6e6e6);
+  background-image: linear-gradient(to bottom, #ffffff, #e6e6e6);
+  background-repeat: repeat-x;
+  border: 1px solid #cccccc;
+  *border: 0;
+  border-color: #e6e6e6 #e6e6e6 #bfbfbf;
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  border-bottom-color: #b3b3b3;
+/*  -webkit-border-radius: 4px;
+     -moz-border-radius: 4px;
+          border-radius: 4px;*/
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+  *zoom: 1;
+  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+     -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+          box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+}
+
+.btn:hover,
+.btn:focus,
+.btn:active,
+.btn.active,
+.btn.disabled,
+.btn[disabled] {
+  color: #333333;
+  background-color: #e6e6e6;
+  *background-color: #d9d9d9;
+}
+
+.btn:active,
+.btn.active {
+  background-color: #cccccc \9;
+}
+
+.btn:first-child {
+  *margin-left: 0;
+}
+
+.btn:hover,
+.btn:focus {
+  color: #333333;
+  text-decoration: none;
+  background-position: 0 -15px;
+  -webkit-transition: background-position 0.1s linear;
+     -moz-transition: background-position 0.1s linear;
+       -o-transition: background-position 0.1s linear;
+          transition: background-position 0.1s linear;
+}
+
+.btn:focus {
+  outline: thin dotted #333;
+  outline: 5px auto -webkit-focus-ring-color;
+  outline-offset: -2px;
+}
+
+.btn.active,
+.btn:active {
+  background-image: none;
+  outline: 0;
+  -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+     -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+          box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+}
+
+.btn.disabled,
+.btn[disabled] {
+  cursor: default;
+  background-image: none;
+  opacity: 0.65;
+  filter: alpha(opacity=65);
+  -webkit-box-shadow: none;
+     -moz-box-shadow: none;
+          box-shadow: none;
+}
+
+.btn-large {
+  padding: 11px 19px;
+  font-size: 17.5px;
+/*  -webkit-border-radius: 6px;
+     -moz-border-radius: 6px;
+          border-radius: 6px;*/
+}
+
+.btn-large [class^="icon-"],
+.btn-large [class*=" icon-"] {
+  margin-top: 4px;
+}
+
+.btn-small {
+  padding: 2px 10px;
+  font-size: 11.9px;
+/*  -webkit-border-radius: 3px;
+     -moz-border-radius: 3px;
+          border-radius: 3px;*/
+}
+
+.btn-small [class^="icon-"],
+.btn-small [class*=" icon-"] {
+  margin-top: 0;
+}
+
+.btn-mini [class^="icon-"],
+.btn-mini [class*=" icon-"] {
+  margin-top: -1px;
+}
+
+.btn-mini {
+  padding: 0 6px;
+  font-size: 10.5px;
+  -webkit-border-radius: 3px;
+     -moz-border-radius: 3px;
+          border-radius: 3px;
+}
+
+.btn-block {
+  display: block;
+  width: 100%;
+  padding-right: 0;
+  padding-left: 0;
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+          box-sizing: border-box;
+}
+
+.btn-block + .btn-block {
+  margin-top: 5px;
+}
+
+input[type="submit"].btn-block,
+input[type="reset"].btn-block,
+input[type="button"].btn-block {
+  width: 100%;
+}
+
+.btn-primary.active,
+.btn-warning.active,
+.btn-danger.active,
+.btn-success.active,
+.btn-info.active,
+.btn-inverse.active {
+  color: rgba(255, 255, 255, 0.75);
+}
+
+.btn-primary {
+  color: #ffffff;
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+  background-color: #006dcc;
+  *background-color: #0044cc;
+  background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
+  background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
+  background-image: -o-linear-gradient(top, #0088cc, #0044cc);
+  background-image: linear-gradient(to bottom, #0088cc, #0044cc);
+  background-repeat: repeat-x;
+  border-color: #0044cc #0044cc #002a80;
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+}
+
+.btn-primary:hover,
+.btn-primary:focus,
+.btn-primary:active,
+.btn-primary.active,
+.btn-primary.disabled,
+.btn-primary[disabled] {
+  color: #ffffff;
+  background-color: #0044cc;
+  *background-color: #003bb3;
+}
+
+.btn-primary:active,
+.btn-primary.active {
+  background-color: #003399 \9;
+}
+
+.btn-warning {
+  color: #ffffff;
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+  background-color: #faa732;
+  *background-color: #f89406;
+  background-image: -moz-linear-gradient(top, #fbb450, #f89406);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));
+  background-image: -webkit-linear-gradient(top, #fbb450, #f89406);
+  background-image: -o-linear-gradient(top, #fbb450, #f89406);
+  background-image: linear-gradient(to bottom, #fbb450, #f89406);
+  background-repeat: repeat-x;
+  border-color: #f89406 #f89406 #ad6704;
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+}
+
+.btn-warning:hover,
+.btn-warning:focus,
+.btn-warning:active,
+.btn-warning.active,
+.btn-warning.disabled,
+.btn-warning[disabled] {
+  color: #ffffff;
+  background-color: #f89406;
+  *background-color: #df8505;
+}
+
+.btn-warning:active,
+.btn-warning.active {
+  background-color: #c67605 \9;
+}
+
+.btn-danger {
+  color: #ffffff;
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+  background-color: #da4f49;
+  *background-color: #bd362f;
+  background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));
+  background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f);
+  background-image: -o-linear-gradient(top, #ee5f5b, #bd362f);
+  background-image: linear-gradient(to bottom, #ee5f5b, #bd362f);
+  background-repeat: repeat-x;
+  border-color: #bd362f #bd362f #802420;
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+}
+
+.btn-danger:hover,
+.btn-danger:focus,
+.btn-danger:active,
+.btn-danger.active,
+.btn-danger.disabled,
+.btn-danger[disabled] {
+  color: #ffffff;
+  background-color: #bd362f;
+  *background-color: #a9302a;
+}
+
+.btn-danger:active,
+.btn-danger.active {
+  background-color: #942a25 \9;
+}
+
+.btn-success {
+  color: #ffffff;
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+  background-color: #5bb75b;
+  *background-color: #51a351;
+  background-image: -moz-linear-gradient(top, #62c462, #51a351);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));
+  background-image: -webkit-linear-gradient(top, #62c462, #51a351);
+  background-image: -o-linear-gradient(top, #62c462, #51a351);
+  background-image: linear-gradient(to bottom, #62c462, #51a351);
+  background-repeat: repeat-x;
+  border-color: #51a351 #51a351 #387038;
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+}
+
+.btn-success:hover,
+.btn-success:focus,
+.btn-success:active,
+.btn-success.active,
+.btn-success.disabled,
+.btn-success[disabled] {
+  color: #ffffff;
+  background-color: #51a351;
+  *background-color: #499249;
+}
+
+.btn-success:active,
+.btn-success.active {
+  background-color: #408140 \9;
+}
+
+.btn-info {
+  color: #ffffff;
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+  background-color: #49afcd;
+  *background-color: #2f96b4;
+  background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));
+  background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4);
+  background-image: -o-linear-gradient(top, #5bc0de, #2f96b4);
+  background-image: linear-gradient(to bottom, #5bc0de, #2f96b4);
+  background-repeat: repeat-x;
+  border-color: #2f96b4 #2f96b4 #1f6377;
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+}
+
+.btn-info:hover,
+.btn-info:focus,
+.btn-info:active,
+.btn-info.active,
+.btn-info.disabled,
+.btn-info[disabled] {
+  color: #ffffff;
+  background-color: #2f96b4;
+  *background-color: #2a85a0;
+}
+
+.btn-info:active,
+.btn-info.active {
+  background-color: #24748c \9;
+}
+
+.btn-inverse {
+  color: #ffffff;
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+  background-color: #363636;
+  *background-color: #222222;
+  background-image: -moz-linear-gradient(top, #444444, #222222);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222));
+  background-image: -webkit-linear-gradient(top, #444444, #222222);
+  background-image: -o-linear-gradient(top, #444444, #222222);
+  background-image: linear-gradient(to bottom, #444444, #222222);
+  background-repeat: repeat-x;
+  border-color: #222222 #222222 #000000;
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+}
+
+.btn-inverse:hover,
+.btn-inverse:focus,
+.btn-inverse:active,
+.btn-inverse.active,
+.btn-inverse.disabled,
+.btn-inverse[disabled] {
+  color: #ffffff;
+  background-color: #222222;
+  *background-color: #151515;
+}
+
+.btn-inverse:active,
+.btn-inverse.active {
+  background-color: #080808 \9;
+}
+
+button.btn,
+input[type="submit"].btn {
+  *padding-top: 3px;
+  *padding-bottom: 3px;
+}
+
+button.btn::-moz-focus-inner,
+input[type="submit"].btn::-moz-focus-inner {
+  padding: 0;
+  border: 0;
+}
+
+button.btn.btn-large,
+input[type="submit"].btn.btn-large {
+  *padding-top: 7px;
+  *padding-bottom: 7px;
+}
+
+button.btn.btn-small,
+input[type="submit"].btn.btn-small {
+  *padding-top: 3px;
+  *padding-bottom: 3px;
+}
+
+button.btn.btn-mini,
+input[type="submit"].btn.btn-mini {
+  *padding-top: 1px;
+  *padding-bottom: 1px;
+}
+
+.btn-link,
+.btn-link:active,
+.btn-link[disabled] {
+  background-color: transparent;
+  background-image: none;
+  -webkit-box-shadow: none;
+     -moz-box-shadow: none;
+          box-shadow: none;
+}
+
+.btn-link {
+  color: #0088cc;
+  cursor: pointer;
+  border-color: transparent;
+  -webkit-border-radius: 0;
+     -moz-border-radius: 0;
+          border-radius: 0;
+}
+
+.btn-link:hover,
+.btn-link:focus {
+  color: #005580;
+  text-decoration: underline;
+  background-color: transparent;
+}
+
+.btn-link[disabled]:hover,
+.btn-link[disabled]:focus {
+  color: #333333;
+  text-decoration: none;
+}
+
+.btn-group {
+  position: relative;
+  display: inline-block;
+  *display: inline;
+  *margin-left: .3em;
+  font-size: 0;
+  white-space: nowrap;
+  vertical-align: middle;
+  *zoom: 1;
+}
+
+.btn-group:first-child {
+  *margin-left: 0;
+}
+
+.btn-group + .btn-group {
+  margin-left: 5px;
+}
+
+.btn-toolbar {
+  margin-top: 10px;
+  margin-bottom: 10px;
+  font-size: 0;
+}
+
+.btn-toolbar > .btn + .btn,
+.btn-toolbar > .btn-group + .btn,
+.btn-toolbar > .btn + .btn-group {
+  margin-left: 5px;
+}
+
+.btn-group > .btn {
+  position: relative;
+  -webkit-border-radius: 0;
+     -moz-border-radius: 0;
+          border-radius: 0;
+}
+
+.btn-group > .btn + .btn {
+  margin-left: -1px;
+}
+
+.btn-group > .btn,
+.btn-group > .dropdown-menu,
+.btn-group > .popover {
+  font-size: 14px;
+}
+
+.btn-group > .btn-mini {
+  font-size: 10.5px;
+}
+
+.btn-group > .btn-small {
+  font-size: 11.9px;
+}
+
+.btn-group > .btn-large {
+  font-size: 17.5px;
+}
+
+.btn-group > .btn:first-child {
+  margin-left: 0;
+/*  -webkit-border-bottom-left-radius: 4px;
+          border-bottom-left-radius: 4px;
+  -webkit-border-top-left-radius: 4px;
+          border-top-left-radius: 4px;
+  -moz-border-radius-bottomleft: 4px;
+  -moz-border-radius-topleft: 4px;*/
+}
+
+.btn-group > .btn:last-child,
+.btn-group > .dropdown-toggle {
+/*  -webkit-border-top-right-radius: 4px;
+          border-top-right-radius: 4px;
+  -webkit-border-bottom-right-radius: 4px;
+          border-bottom-right-radius: 4px;
+  -moz-border-radius-topright: 4px;
+  -moz-border-radius-bottomright: 4px;*/
+}
+
+.btn-group > .btn.large:first-child {
+  margin-left: 0;
+/*  -webkit-border-bottom-left-radius: 6px;
+          border-bottom-left-radius: 6px;
+  -webkit-border-top-left-radius: 6px;
+          border-top-left-radius: 6px;
+  -moz-border-radius-bottomleft: 6px;
+  -moz-border-radius-topleft: 6px;*/
+}
+
+.btn-group > .btn.large:last-child,
+.btn-group > .large.dropdown-toggle {
+/*  -webkit-border-top-right-radius: 6px;
+          border-top-right-radius: 6px;
+  -webkit-border-bottom-right-radius: 6px;
+          border-bottom-right-radius: 6px;
+  -moz-border-radius-topright: 6px;
+  -moz-border-radius-bottomright: 6px;*/
+}
+
+.btn-group > .btn:hover,
+.btn-group > .btn:focus,
+.btn-group > .btn:active,
+.btn-group > .btn.active {
+  z-index: 2;
+}
+
+.btn-group .dropdown-toggle:active,
+.btn-group.open .dropdown-toggle {
+  outline: 0;
+}
+
+.btn-group > .btn + .dropdown-toggle {
+  *padding-top: 5px;
+  padding-right: 8px;
+  *padding-bottom: 5px;
+  padding-left: 8px;
+  -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+     -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+          box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+}
+
+.btn-group > .btn-mini + .dropdown-toggle {
+  *padding-top: 2px;
+  padding-right: 5px;
+  *padding-bottom: 2px;
+  padding-left: 5px;
+}
+
+.btn-group > .btn-small + .dropdown-toggle {
+  *padding-top: 5px;
+  *padding-bottom: 4px;
+}
+
+.btn-group > .btn-large + .dropdown-toggle {
+  *padding-top: 7px;
+  padding-right: 12px;
+  *padding-bottom: 7px;
+  padding-left: 12px;
+}
+
+.btn-group.open .dropdown-toggle {
+  background-image: none;
+  -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+     -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+          box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+}
+
+.btn-group.open .btn.dropdown-toggle {
+  background-color: #e6e6e6;
+}
+
+.btn-group.open .btn-primary.dropdown-toggle {
+  background-color: #0044cc;
+}
+
+.btn-group.open .btn-warning.dropdown-toggle {
+  background-color: #f89406;
+}
+
+.btn-group.open .btn-danger.dropdown-toggle {
+  background-color: #bd362f;
+}
+
+.btn-group.open .btn-success.dropdown-toggle {
+  background-color: #51a351;
+}
+
+.btn-group.open .btn-info.dropdown-toggle {
+  background-color: #2f96b4;
+}
+
+.btn-group.open .btn-inverse.dropdown-toggle {
+  background-color: #222222;
+}
+
+.btn .caret {
+  margin-top: 8px;
+  margin-left: 0;
+}
+
+.btn-large .caret {
+  margin-top: 6px;
+}
+
+.btn-large .caret {
+  border-top-width: 5px;
+  border-right-width: 5px;
+  border-left-width: 5px;
+}
+
+.btn-mini .caret,
+.btn-small .caret {
+  margin-top: 8px;
+}
+
+.dropup .btn-large .caret {
+  border-bottom-width: 5px;
+}
+
+.btn-primary .caret,
+.btn-warning .caret,
+.btn-danger .caret,
+.btn-info .caret,
+.btn-success .caret,
+.btn-inverse .caret {
+  border-top-color: #ffffff;
+  border-bottom-color: #ffffff;
+}
+
+.btn-group-vertical {
+  display: inline-block;
+  *display: inline;
+  /* IE7 inline-block hack */
+
+  *zoom: 1;
+}
+
+.btn-group-vertical > .btn {
+  display: block;
+  float: none;
+  max-width: 100%;
+  -webkit-border-radius: 0;
+     -moz-border-radius: 0;
+          border-radius: 0;
+}
+
+.btn-group-vertical > .btn + .btn {
+  margin-top: -1px;
+  margin-left: 0;
+}
+
+.btn-group-vertical > .btn:first-child {
+  -webkit-border-radius: 4px 4px 0 0;
+     -moz-border-radius: 4px 4px 0 0;
+          border-radius: 4px 4px 0 0;
+}
+
+.btn-group-vertical > .btn:last-child {
+  -webkit-border-radius: 0 0 4px 4px;
+     -moz-border-radius: 0 0 4px 4px;
+          border-radius: 0 0 4px 4px;
+}
+
+.btn-group-vertical > .btn-large:first-child {
+  -webkit-border-radius: 6px 6px 0 0;
+     -moz-border-radius: 6px 6px 0 0;
+          border-radius: 6px 6px 0 0;
+}
+
+.btn-group-vertical > .btn-large:last-child {
+  -webkit-border-radius: 0 0 6px 6px;
+     -moz-border-radius: 0 0 6px 6px;
+          border-radius: 0 0 6px 6px;
+}
+
+.alert {
+  padding: 5px 30px 5px 14px;
+  margin:6px;
+  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
+  background-color: #fcf8e3;
+  border: 1px solid #fbeed5;
+ -webkit-border-radius: 3px;
+     -moz-border-radius: 3px;
+          border-radius: 3px;
+}
+
+.alert,
+.alert h4 {
+  color: #c09853;
+}
+
+.alert h4 {
+  margin: 0;
+}
+
+.alert .close {
+  position: relative;
+/*  top: -2px;
+*/  right: -21px;
+  line-height: 20px;
+}
+
+.alert-success {
+  color: #468847;
+  background-color: #dff0d8;
+  border-color: #d6e9c6;
+}
+
+.alert-success h4 {
+  color: #468847;
+}
+
+.alert-danger,
+.alert-error {
+  color: #b94a48;
+  background-color: #f2dede;
+  border-color: #eed3d7;
+}
+
+.alert-danger h4,
+.alert-error h4 {
+  color: #b94a48;
+}
+
+.alert-info {
+  color: #3a87ad;
+  background-color: #d9edf7;
+  border-color: #bce8f1;
+}
+
+.alert-info h4 {
+  color: #3a87ad;
+}
+
+.alert-block {
+  padding-top: 14px;
+  padding-bottom: 14px;
+}
+
+.alert-block > p,
+.alert-block > ul {
+  margin-bottom: 0;
+}
+
+.alert-block p + p {
+  margin-top: 5px;
+}
+
+.nav {
+/*  margin-bottom: 20px;*/
+/*margin-top:5px;*/
+  margin-left: 0;
+  list-style: none;
+  font-weight:bold;
+}
+
+.nav > li > a {
+  display: block;
+}
+
+.nav > li > a:hover,
+.nav > li > a:focus {
+  text-decoration: none;
+  background-color: #0088CC;
+  color:#fff;
+}
+
+.nav > li > a > img {
+  max-width: none;
+}
+
+.nav > .pull-right {
+  float: right;
+}
+
+.nav-header {
+  display: block;
+  padding: 3px 15px;
+  font-size: 11px;
+  font-weight: bold;
+  line-height: 20px;
+  color: #999999;
+  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
+  text-transform: uppercase;
+}
+
+.nav li + .nav-header {
+  margin-top: 9px;
+}
+
+.nav-list {
+  padding-right: 15px;
+  padding-left: 15px;
+  margin-bottom: 0;
+}
+
+.nav-list > li > a,
+.nav-list .nav-header {
+  margin-right: -15px;
+  margin-left: -15px;
+  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
+}
+
+.nav-list > li > a {
+  padding: 3px 15px;
+}
+
+.nav-list > .active > a,
+.nav-list > .active > a:hover,
+.nav-list > .active > a:focus {
+  color: #ffffff;
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);
+  background-color: #0088cc;
+}
+
+.nav-list [class^="icon-"],
+.nav-list [class*=" icon-"] {
+  margin-right: 2px;
+}
+
+.nav-list .divider {
+  *width: 100%;
+  height: 1px;
+  margin: 9px 1px;
+  *margin: -5px 0 5px;
+  overflow: hidden;
+  background-color: #e5e5e5;
+  border-bottom: 1px solid #ffffff;
+}
+
+.nav-tabs,
+.nav-pills {
+  *zoom: 1;
+}
+
+.nav-tabs:before,
+.nav-pills:before,
+.nav-tabs:after,
+.nav-pills:after {
+  display: table;
+  line-height: 0;
+  content: "";
+}
+
+.nav-tabs:after,
+.nav-pills:after {
+  clear: both;
+}
+
+.nav-tabs > li,
+.nav-pills > li {
+  float: left;
+}
+
+.nav-tabs > li > a,
+.nav-pills > li > a {
+  padding-right: 12px;
+  padding-left: 12px;
+  margin-right: 2px;
+  line-height: 14px;
+}
+
+.nav-tabs {
+ /*  border-bottom: 1px solid #ddd;
+ min-height:250px;
+*/
+margin:0 10px;
+}
+
+.nav-tabs > li {
+  margin-bottom: -1px;
+}
+
+.nav-tabs > li > a {
+  padding-top: 10px;
+  padding-bottom: 10px;
+/*  line-height: 20px;*/
+  border: 1px solid transparent;
+  -webkit-border-radius: 4px 4px 0 0;
+     -moz-border-radius: 4px 4px 0 0;
+          border-radius: 4px 4px 0 0;
+}
+
+.nav-tabs > li > a:hover,
+.nav-tabs > li > a:focus {
+  border-color: #eeeeee #eeeeee #dddddd;
+}
+
+.nav-tabs > .active > a,
+.nav-tabs > .active > a:hover,
+.nav-tabs > .active > a:focus {
+  color: #555555;
+  cursor: default;
+  background-color: #ffffff;
+  background-image:linear-gradient(to bottom, #fafafa, #f0f0f0);
+  border: 1px solid #ddd;
+  border-bottom-color: transparent;
+}
+
+.nav-pills > li > a {
+  padding-top: 8px;
+  padding-bottom: 8px;
+  margin-top: 2px;
+  margin-bottom: 2px;
+  background-color:#c9e9ff;
+/*  -webkit-border-radius: 3px;
+     -moz-border-radius: 3px;
+          border-radius: 3px;*/
+}
+
+.nav-pills > .active > a,
+.nav-pills > .active > a:hover,
+.nav-pills > .active > a:focus {
+  color: #fff;
+  background-color: #0088cc;
+  border:#1972c3 solid 1px;
+}
+
+.nav-pills > .warning > a,
+.nav-pills > .warning > a:hover,
+.nav-pills > .warning > a:focus {
+  color: #B94A48;
+  background-color: #F2DEDE;
+  border:#EED3D7 solid 1px;
+}
+
+.nav-stacked > li {
+  float: none;
+}
+
+.nav-stacked > li > a {
+  margin-right: 0;
+/*  border:1px solid #B9D9F0;
+*/}
+
+.nav-tabs.nav-stacked {
+  border-bottom: 0;
+}
+
+.nav-tabs.nav-stacked > li > a {
+  border: 1px solid #ddd;
+  -webkit-border-radius: 0;
+     -moz-border-radius: 0;
+          border-radius: 0;
+}
+
+.nav-tabs.nav-stacked > li:first-child > a {
+  -webkit-border-top-right-radius: 2px;
+          border-top-right-radius: 2px;
+  -webkit-border-top-left-radius: 2px;
+          border-top-left-radius: 2px;
+  -moz-border-radius-topright: 2px;
+  -moz-border-radius-topleft: 2px;
+}
+
+.nav-tabs.nav-stacked > li:last-child > a {
+  -webkit-border-bottom-right-radius: 4px;
+          border-bottom-right-radius: 4px;
+  -webkit-border-bottom-left-radius: 4px;
+          border-bottom-left-radius: 4px;
+  -moz-border-radius-bottomright: 4px;
+  -moz-border-radius-bottomleft: 4px;
+}
+
+.nav-tabs.nav-stacked > li > a:hover,
+.nav-tabs.nav-stacked > li > a:focus {
+  z-index: 2;
+  border-color: #ddd;
+}
+
+.nav-pills.nav-stacked > li > a {
+  margin-bottom: 5px;
+}
+
+.nav-pills.nav-stacked > li:last-child > a {
+  margin-bottom: 1px;
+}
+
+.nav-tabs .dropdown-menu {
+  -webkit-border-radius: 0 0 6px 6px;
+     -moz-border-radius: 0 0 6px 6px;
+          border-radius: 0 0 6px 6px;
+}
+
+.nav-pills .dropdown-menu {
+  -webkit-border-radius: 6px;
+     -moz-border-radius: 6px;
+          border-radius: 6px;
+}
+
+.nav .dropdown-toggle .caret {
+  margin-top: 6px;
+  border-top-color: #0088cc;
+  border-bottom-color: #0088cc;
+}
+
+.nav .dropdown-toggle:hover .caret,
+.nav .dropdown-toggle:focus .caret {
+  border-top-color: #005580;
+  border-bottom-color: #005580;
+}
+
+/* move down carets for tabs */
+
+.nav-tabs .dropdown-toggle .caret {
+  margin-top: 8px;
+}
+
+.nav .active .dropdown-toggle .caret {
+  border-top-color: #fff;
+  border-bottom-color: #fff;
+}
+
+.nav-tabs .active .dropdown-toggle .caret {
+  border-top-color: #555555;
+  border-bottom-color: #555555;
+}
+
+.nav > .dropdown.active > a:hover,
+.nav > .dropdown.active > a:focus {
+  cursor: pointer;
+}
+
+.nav-tabs .open .dropdown-toggle,
+.nav-pills .open .dropdown-toggle,
+.nav > li.dropdown.open.active > a:hover,
+.nav > li.dropdown.open.active > a:focus {
+  color: #ffffff;
+  background-color: #999999;
+  border-color: #999999;
+}
+
+.nav li.dropdown.open .caret,
+.nav li.dropdown.open.active .caret,
+.nav li.dropdown.open a:hover .caret,
+.nav li.dropdown.open a:focus .caret {
+  border-top-color: #ffffff;
+  border-bottom-color: #ffffff;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+
+.tabs-stacked .open > a:hover,
+.tabs-stacked .open > a:focus {
+  border-color: #999999;
+}
+
+.tabbable {
+  *zoom: 1;
+}
+
+.tabbable:before,
+.tabbable:after {
+  display: table;
+  line-height: 0;
+  content: "";
+}
+
+.tabbable:after {
+  clear: both;
+}
+
+.tab-content {
+  overflow: auto;
+  border:#ddd solid 1px;
+  padding:15px;
+/*  min-height:428px;
+*/  border-radius:0px 4px 4px 4px;
+/*  border-top:none;
+  border-right:none;
+  border-bottom:none;  border-left:none;*/
+  border:#ddd solid 1px;
+  margin-bottom:10px;
+  margin-left:10px; margin-right:10px;
+
+}
+
+.tabs-below > .nav-tabs,
+.tabs-right > .nav-tabs,
+.tabs-left > .nav-tabs {
+  border-bottom: 0;
+}
+
+.tab-content > .tab-pane,
+.pill-content > .pill-pane {
+  display: none;
+}
+
+.tab-content > .active,
+.pill-content > .active {
+  display: block;
+}
+
+.tabs-below > .nav-tabs {
+  border-top: 1px solid #ddd;
+}
+
+.tabs-below > .nav-tabs > li {
+  margin-top: -1px;
+  margin-bottom: 0;
+}
+
+.tabs-below > .nav-tabs > li > a {
+  -webkit-border-radius: 0 0 4px 4px;
+     -moz-border-radius: 0 0 4px 4px;
+          border-radius: 0 0 4px 4px;
+}
+
+.tabs-below > .nav-tabs > li > a:hover,
+.tabs-below > .nav-tabs > li > a:focus {
+  border-top-color: #ddd;
+  border-bottom-color: transparent;
+}
+
+.tabs-below > .nav-tabs > .active > a,
+.tabs-below > .nav-tabs > .active > a:hover,
+.tabs-below > .nav-tabs > .active > a:focus {
+  border-color: transparent #ddd #ddd #ddd;
+}
+
+.tabs-left > .nav-tabs > li,
+.tabs-right > .nav-tabs > li {
+  float: none;
+}
+
+.tabs-left > .nav-tabs > li > a,
+.tabs-right > .nav-tabs > li > a {
+  min-width: 74px;
+  margin-right: 0;
+  margin-bottom: 5px;
+}
+
+.tabs-left > .nav-tabs {
+  float: left;
+  margin-right: 0px;
+  border-right: 1px solid #ddd;
+  min-height:448px;
+}
+
+.tabs-left > .nav-tabs > li > a {
+  margin-right: -1px;
+  -webkit-border-radius: 4px 0 0 4px;
+     -moz-border-radius: 4px 0 0 4px;
+          border-radius: 4px 0 0 4px;
+		  font-size:18px;
+}
+
+.tabs-left > .nav-tabs > li > a:hover,
+.tabs-left > .nav-tabs > li > a:focus {
+  border-color: #eeeeee #dddddd #eeeeee #eeeeee;
+}
+
+.tabs-left > .nav-tabs .active > a,
+.tabs-left > .nav-tabs .active > a:hover,
+.tabs-left > .nav-tabs .active > a:focus {
+  border-color: #ddd transparent #ddd #ddd;
+  *border-right-color: #ffffff;
+}
+
+.tabs-right > .nav-tabs {
+  float: right;
+  margin-left: 19px;
+  border-left: 1px solid #ddd;
+}
+
+.tabs-right > .nav-tabs > li > a {
+  margin-left: -1px;
+  -webkit-border-radius: 0 4px 4px 0;
+     -moz-border-radius: 0 4px 4px 0;
+          border-radius: 0 4px 4px 0;
+}
+
+.tabs-right > .nav-tabs > li > a:hover,
+.tabs-right > .nav-tabs > li > a:focus {
+  border-color: #eeeeee #eeeeee #eeeeee #dddddd;
+}
+
+.tabs-right > .nav-tabs .active > a,
+.tabs-right > .nav-tabs .active > a:hover,
+.tabs-right > .nav-tabs .active > a:focus {
+  border-color: #ddd #ddd #ddd transparent;
+  *border-left-color: #ffffff;
+}
+
+.nav > .disabled > a {
+  color: #999999;
+}
+
+.nav > .disabled > a:hover,
+.nav > .disabled > a:focus {
+  text-decoration: none;
+  cursor: default;
+  background-color: transparent;
+}
+
+.navbar {
+  *position: relative;
+  *z-index: 2;
+  margin-bottom: 0px;
+  overflow: visible;
+}
+
+.navbar-inner {
+  background-image:url(../images/header-bg.png);
+  min-height: 50px;
+  padding-right: 20px;
+  padding-left: 20px;
+ background-color: #0073BF;
+  /* background-image: -moz-linear-gradient(top, #017CCE, #0073BF);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#017CCE), to(#0073BF));
+  background-image: -webkit-linear-gradient(top, #017CCE, #0073BF);
+  background-image: -o-linear-gradient(top, #017CCE, #0073BF);
+  background-image: linear-gradient(to bottom, #017CCE, #0073BF);*/
+  background-repeat: repeat-x;
+  border: none;
+  -webkit-border-radius: 0px;
+     -moz-border-radius: 0px;
+          border-radius: 0px;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#34a4ee', endColorstr='#086dba', GradientType=0);
+  *zoom: 1;
+  -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);
+     -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);
+          box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);
+}
+
+.navbar-inner:before,
+.navbar-inner:after {
+  display: table;
+  line-height: 0;
+  content: "";
+}
+
+.navbar-inner:after {
+  clear: both;
+}
+
+.navbar .container {
+  width: auto;
+}
+
+.nav-collapse.collapse {
+  height: auto;
+  overflow: visible;
+}
+
+.navbar .brand {
+  display: block;
+  float: left;
+  margin-left: -20px;
+  font-size: 26px;
+  color: #fff;
+  text-shadow: 0 1px 0 #4d4d4d;
+  font-family:"微软雅黑";
+  height:50px; line-height:50px;
+  padding:0 20px;
+}
+
+.navbar .brand:hover,
+.navbar .brand:focus {
+  text-decoration: none;
+}
+
+.navbar-text {
+  margin-bottom: 0;
+  line-height: 40px;
+  color: #777777;
+}
+
+.navbar-link {
+  color: #777777;
+}
+
+.navbar-link:hover,
+.navbar-link:focus {
+  color: #333333;
+}
+
+.navbar .divider-vertical {
+  height: 10px;
+  margin: 22px 5px;
+  border-right: 0px solid #ffffff;
+  border-left: 1px solid #f2f2f2;
+}
+
+.navbar .btn,
+.navbar .btn-group {
+  margin-top: 5px;
+}
+
+.navbar .btn-group .btn,
+.navbar .input-prepend .btn,
+.navbar .input-append .btn,
+.navbar .input-prepend .btn-group,
+.navbar .input-append .btn-group {
+  margin-top: 0;
+}
+
+.navbar-form {
+  margin-bottom: 0;
+  *zoom: 1;
+}
+
+.navbar-form:before,
+.navbar-form:after {
+  display: table;
+  line-height: 0;
+  content: "";
+}
+
+.navbar-form:after {
+  clear: both;
+}
+
+.navbar-form input,
+.navbar-form select,
+.navbar-form .radio,
+.navbar-form .checkbox {
+  margin-top: 5px;
+}
+
+.navbar-form input,
+.navbar-form select,
+.navbar-form .btn {
+  display: inline-block;
+  margin-bottom: 0;
+}
+
+.navbar-form input[type="image"],
+.navbar-form input[type="checkbox"],
+.navbar-form input[type="radio"] {
+  margin-top: 3px;
+}
+
+.navbar-form .input-append,
+.navbar-form .input-prepend {
+  margin-top: 5px;
+  white-space: nowrap;
+}
+
+.navbar-form .input-append input,
+.navbar-form .input-prepend input {
+  margin-top: 0;
+}
+
+.navbar-search {
+  position: relative;
+  float: left;
+  margin-top: 5px;
+  margin-bottom: 0;
+}
+
+.navbar-search .search-query {
+  padding: 4px 14px;
+  margin-bottom: 0;
+  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+  font-size: 13px;
+  font-weight: normal;
+  line-height: 1;
+  -webkit-border-radius: 15px;
+     -moz-border-radius: 15px;
+          border-radius: 15px;
+}
+
+.navbar-static-top {
+  position: static;
+  margin-bottom: 0;
+}
+
+.navbar-static-top .navbar-inner {
+  -webkit-border-radius: 0;
+     -moz-border-radius: 0;
+          border-radius: 0;
+}
+
+.navbar-fixed-top,
+.navbar-fixed-bottom {
+  position: fixed;
+  right: 0;
+  left: 0;
+  z-index: 1030;
+  margin-bottom: 0;
+}
+
+.navbar-fixed-top .navbar-inner,
+.navbar-static-top .navbar-inner {
+  border-width: 0 0 1px;
+}
+
+.navbar-fixed-bottom .navbar-inner {
+  border-width: 1px 0 0;
+}
+
+.navbar-fixed-top .navbar-inner,
+.navbar-fixed-bottom .navbar-inner {
+  padding-right: 0;
+  padding-left: 0;
+  -webkit-border-radius: 0;
+     -moz-border-radius: 0;
+          border-radius: 0;
+}
+
+.navbar-static-top .container,
+.navbar-fixed-top .container,
+.navbar-fixed-bottom .container {
+  width: 940px;
+}
+
+.navbar-fixed-top {
+  top: 0;
+}
+
+.navbar-fixed-top .navbar-inner,
+.navbar-static-top .navbar-inner {
+  -webkit-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1);
+     -moz-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1);
+          box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1);
+}
+
+.navbar-fixed-bottom {
+  bottom: 0;
+}
+
+.navbar-fixed-bottom .navbar-inner {
+  -webkit-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1);
+     -moz-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1);
+          box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1);
+}
+
+.navbar .nav {
+  position: relative;
+  left: 0;
+  display: block;
+  float: left;
+  margin: 0 10px 0 0;
+}
+
+.navbar .nav.pull-right {
+  float: right;
+  margin-right: 0;
+}
+
+.navbar .nav > li {
+  float: left;
+}
+
+.navbar .nav > li > a {
+  color: #fff;
+  text-decoration: none;
+/*  border-radius:4px;*/
+  height:35px; 
+  line-height:35px;
+  margin:10px; 
+  padding:0 10px;
+  text-shadow: 0 1px 0 #;
+}
+
+.navbar .nav .dropdown-toggle .caret {
+  margin-top: 8px;
+}
+
+.navbar .nav > li > a:focus,
+.navbar .nav > li > a:hover {
+  color: #fff;
+  text-decoration: none;
+  background-color: #0961a3;
+  
+}
+
+.navbar .nav > .active > a,
+.navbar .nav > .active > a:hover,
+.navbar .nav > .active > a:focus {
+  color: #00659a;
+  text-decoration: none;
+/*  border-radius:4px;*/
+  height:35px; line-height:35px;
+  margin:10px; 
+  padding:0 10px;
+  background-color: #c4e8ff;
+  -webkit-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125);
+     -moz-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125);
+          box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125);
+}
+
+.navbar .btn-navbar {
+  display: none;
+  float: right;
+  padding: 7px 10px;
+  margin-right: 5px;
+  margin-left: 5px;
+  color: #ffffff;
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+  background-color: #ededed;
+  *background-color: #e5e5e5;
+  background-image: -moz-linear-gradient(top, #f2f2f2, #e5e5e5);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5));
+  background-image: -webkit-linear-gradient(top, #f2f2f2, #e5e5e5);
+  background-image: -o-linear-gradient(top, #f2f2f2, #e5e5e5);
+  background-image: linear-gradient(to bottom, #f2f2f2, #e5e5e5);
+  background-repeat: repeat-x;
+  border-color: #e5e5e5 #e5e5e5 #bfbfbf;
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
+     -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
+          box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
+}
+
+.navbar .btn-navbar:hover,
+.navbar .btn-navbar:focus,
+.navbar .btn-navbar:active,
+.navbar .btn-navbar.active,
+.navbar .btn-navbar.disabled,
+.navbar .btn-navbar[disabled] {
+  color: #ffffff;
+  background-color: #e5e5e5;
+  *background-color: #d9d9d9;
+}
+
+.navbar .btn-navbar:active,
+.navbar .btn-navbar.active {
+  background-color: #cccccc \9;
+}
+
+.navbar .btn-navbar .icon-bar {
+  display: block;
+  width: 18px;
+  height: 2px;
+  background-color: #f5f5f5;
+  -webkit-border-radius: 1px;
+     -moz-border-radius: 1px;
+          border-radius: 1px;
+  -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
+     -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
+          box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
+}
+
+.btn-navbar .icon-bar + .icon-bar {
+  margin-top: 3px;
+}
+
+.navbar .nav > li > .dropdown-menu:before {
+  position: absolute;
+  top: -7px;
+  left: 9px;
+  display: inline-block;
+  border-right: 7px solid transparent;
+  border-bottom: 7px solid #ccc;
+  border-left: 7px solid transparent;
+  border-bottom-color: rgba(0, 0, 0, 0.2);
+  content: '';
+}
+
+.navbar .nav > li > .dropdown-menu:after {
+  position: absolute;
+  top: -6px;
+  left: 10px;
+  display: inline-block;
+  border-right: 6px solid transparent;
+  border-bottom: 6px solid #ffffff;
+  border-left: 6px solid transparent;
+  content: '';
+}
+
+.navbar-fixed-bottom .nav > li > .dropdown-menu:before {
+  top: auto;
+  bottom: -7px;
+  border-top: 7px solid #ccc;
+  border-bottom: 0;
+  border-top-color: rgba(0, 0, 0, 0.2);
+}
+
+.navbar-fixed-bottom .nav > li > .dropdown-menu:after {
+  top: auto;
+  bottom: -6px;
+  border-top: 6px solid #ffffff;
+  border-bottom: 0;
+}
+
+.navbar .nav li.dropdown > a:hover .caret,
+.navbar .nav li.dropdown > a:focus .caret {
+  border-top-color: #fff;
+  border-bottom-color: #fff;
+}
+
+.navbar .nav li.dropdown.open > .dropdown-toggle,
+.navbar .nav li.dropdown.active > .dropdown-toggle,
+.navbar .nav li.dropdown.open.active > .dropdown-toggle {
+  color: #555555;
+  background-color: #e5e5e5;
+}
+
+.navbar .nav li.dropdown > .dropdown-toggle .caret {
+  border-top-color: #fff;
+  border-bottom-color: #fff;
+}
+
+.navbar .nav li.dropdown.open > .dropdown-toggle .caret,
+.navbar .nav li.dropdown.active > .dropdown-toggle .caret,
+.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret {
+  border-top-color: #555555;
+  border-bottom-color: #555555;
+}
+
+.navbar .pull-right > li > .dropdown-menu,
+.navbar .nav > li > .dropdown-menu.pull-right {
+  right: 0;
+  left: auto;
+}
+
+.navbar .pull-right > li > .dropdown-menu:before,
+.navbar .nav > li > .dropdown-menu.pull-right:before {
+  right: 12px;
+  left: auto;
+}
+
+.navbar .pull-right > li > .dropdown-menu:after,
+.navbar .nav > li > .dropdown-menu.pull-right:after {
+  right: 13px;
+  left: auto;
+}
+
+.navbar .pull-right > li > .dropdown-menu .dropdown-menu,
+.navbar .nav > li > .dropdown-menu.pull-right .dropdown-menu {
+  right: 100%;
+  left: auto;
+  margin-right: -1px;
+  margin-left: 0;
+  -webkit-border-radius: 6px 0 6px 6px;
+     -moz-border-radius: 6px 0 6px 6px;
+          border-radius: 6px 0 6px 6px;
+}
+
+.navbar-inverse .navbar-inner {
+  background-color: #1b1b1b;
+  background-image: -moz-linear-gradient(top, #222222, #111111);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111));
+  background-image: -webkit-linear-gradient(top, #222222, #111111);
+  background-image: -o-linear-gradient(top, #222222, #111111);
+  background-image: linear-gradient(to bottom, #222222, #111111);
+  background-repeat: repeat-x;
+  border-color: #252525;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0);
+}
+
+.navbar-inverse .brand,
+.navbar-inverse .nav > li > a {
+  color: #999999;
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+}
+
+.navbar-inverse .brand:hover,
+.navbar-inverse .nav > li > a:hover,
+.navbar-inverse .brand:focus,
+.navbar-inverse .nav > li > a:focus {
+  color: #ffffff;
+}
+
+.navbar-inverse .brand {
+  color: #999999;
+}
+
+.navbar-inverse .navbar-text {
+  color: #999999;
+}
+
+.navbar-inverse .nav > li > a:focus,
+.navbar-inverse .nav > li > a:hover {
+  color: #ffffff;
+  background-color: transparent;
+}
+
+.navbar-inverse .nav .active > a,
+.navbar-inverse .nav .active > a:hover,
+.navbar-inverse .nav .active > a:focus {
+  color: #ffffff;
+  background-color: #111111;
+}
+
+.navbar-inverse .navbar-link {
+  color: #999999;
+}
+
+.navbar-inverse .navbar-link:hover,
+.navbar-inverse .navbar-link:focus {
+  color: #ffffff;
+}
+
+.navbar-inverse .divider-vertical {
+  border-right-color: #222222;
+  border-left-color: #111111;
+}
+
+.navbar-inverse .nav li.dropdown.open > .dropdown-toggle,
+.navbar-inverse .nav li.dropdown.active > .dropdown-toggle,
+.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle {
+  color: #ffffff;
+  background-color: #111111;
+}
+
+.navbar-inverse .nav li.dropdown > a:hover .caret,
+.navbar-inverse .nav li.dropdown > a:focus .caret {
+  border-top-color: #ffffff;
+  border-bottom-color: #ffffff;
+}
+
+.navbar-inverse .nav li.dropdown > .dropdown-toggle .caret {
+  border-top-color: #999999;
+  border-bottom-color: #999999;
+}
+
+.navbar-inverse .nav li.dropdown.open > .dropdown-toggle .caret,
+.navbar-inverse .nav li.dropdown.active > .dropdown-toggle .caret,
+.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle .caret {
+  border-top-color: #ffffff;
+  border-bottom-color: #ffffff;
+}
+
+.navbar-inverse .navbar-search .search-query {
+  color: #ffffff;
+  background-color: #515151;
+  border-color: #111111;
+  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15);
+     -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15);
+          box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15);
+  -webkit-transition: none;
+     -moz-transition: none;
+       -o-transition: none;
+          transition: none;
+}
+
+.navbar-inverse .navbar-search .search-query:-moz-placeholder {
+  color: #cccccc;
+}
+
+.navbar-inverse .navbar-search .search-query:-ms-input-placeholder {
+  color: #cccccc;
+}
+
+.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder {
+  color: #cccccc;
+}
+
+.navbar-inverse .navbar-search .search-query:focus,
+.navbar-inverse .navbar-search .search-query.focused {
+  padding: 5px 15px;
+  color: #333333;
+  text-shadow: 0 1px 0 #ffffff;
+  background-color: #ffffff;
+  border: 0;
+  outline: 0;
+  -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
+     -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
+          box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
+}
+
+.navbar-inverse .btn-navbar {
+  color: #ffffff;
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+  background-color: #0e0e0e;
+  *background-color: #040404;
+  background-image: -moz-linear-gradient(top, #151515, #040404);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404));
+  background-image: -webkit-linear-gradient(top, #151515, #040404);
+  background-image: -o-linear-gradient(top, #151515, #040404);
+  background-image: linear-gradient(to bottom, #151515, #040404);
+  background-repeat: repeat-x;
+  border-color: #040404 #040404 #000000;
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+}
+
+.navbar-inverse .btn-navbar:hover,
+.navbar-inverse .btn-navbar:focus,
+.navbar-inverse .btn-navbar:active,
+.navbar-inverse .btn-navbar.active,
+.navbar-inverse .btn-navbar.disabled,
+.navbar-inverse .btn-navbar[disabled] {
+  color: #ffffff;
+  background-color: #040404;
+  *background-color: #000000;
+}
+
+.navbar-inverse .btn-navbar:active,
+.navbar-inverse .btn-navbar.active {
+  background-color: #000000 \9;
+}
+
+.breadcrumb {
+  padding: 8px 15px;
+  margin: 0 0 0px;
+  list-style: none;
+  font-weight:bold;
+  background-color: #f5f5f5;
+/*  -webkit-border-radius: 4px;
+     -moz-border-radius: 4px;
+          border-radius: 4px;*/
+}
+
+.breadcrumb > li {
+  display: inline-block;
+  *display: inline;
+  text-shadow: 0 1px 0 #ffffff;
+  *zoom: 1;
+}
+
+.breadcrumb > li > .divider {
+  padding: 0 5px;
+  color: #ccc;
+}
+
+.breadcrumb > .active {
+  color: #ababab;
+}
+
+.pagination {
+/*  margin: 20px 0;*/
+margin:10px;
+float:left;
+}
+
+.pagination ul {
+  display: inline-block;
+  *display: inline;
+  margin-bottom: 0;
+  margin-left: 0;
+  -webkit-border-radius: 0px;
+     -moz-border-radius: 0px;
+          border-radius: 4px;
+  *zoom: 1;
+  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
+     -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
+          box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
+}
+
+.pagination ul > li {
+  display: inline;
+}
+
+.pagination ul > li > a,
+.pagination ul > li > span {
+  float: left;
+  padding: 6px 14px;
+  line-height: 20px;
+  text-decoration: none;
+  background-color: #ffffff;
+  border: 1px solid #dddddd;
+  border-left-width: 0;
+}
+
+.pagination ul > li > a:hover,
+.pagination ul > li > a:focus,
+.pagination ul > .active > a,
+.pagination ul > .active > span {
+  background-color: #f5f5f5;
+}
+
+.pagination ul > .active > a,
+.pagination ul > .active > span {
+  color: #999999;
+  cursor: default;
+}
+
+.pagination ul > .disabled > span,
+.pagination ul > .disabled > a,
+.pagination ul > .disabled > a:hover,
+.pagination ul > .disabled > a:focus {
+  color: #999999;
+  cursor: default;
+  background-color: transparent;
+}
+
+.pagination ul > li:first-child > a,
+.pagination ul > li:first-child > span {
+  border-left-width: 1px;
+  -webkit-border-bottom-left-radius: 4px;
+          border-bottom-left-radius: 4px;
+  -webkit-border-top-left-radius: 4px;
+          border-top-left-radius: 4px;
+  -moz-border-radius-bottomleft: 4px;
+  -moz-border-radius-topleft: 4px;
+}
+
+.pagination ul > li:last-child > a,
+.pagination ul > li:last-child > span {
+  -webkit-border-top-right-radius: 4px;
+          border-top-right-radius: 4px;
+  -webkit-border-bottom-right-radius: 4px;
+          border-bottom-right-radius: 4px;
+  -moz-border-radius-topright: 4px;
+  -moz-border-radius-bottomright: 4px;
+}
+
+.pagination-centered {
+  text-align: center;
+}
+
+.pagination-right {
+  text-align: right;
+}
+
+.pagination-large ul > li > a,
+.pagination-large ul > li > span {
+  padding: 11px 19px;
+  font-size: 17.5px;
+}
+
+.pagination-large ul > li:first-child > a,
+.pagination-large ul > li:first-child > span {
+  -webkit-border-bottom-left-radius: 6px;
+          border-bottom-left-radius: 6px;
+  -webkit-border-top-left-radius: 6px;
+          border-top-left-radius: 6px;
+  -moz-border-radius-bottomleft: 6px;
+  -moz-border-radius-topleft: 6px;
+}
+
+.pagination-large ul > li:last-child > a,
+.pagination-large ul > li:last-child > span {
+  -webkit-border-top-right-radius: 6px;
+          border-top-right-radius: 6px;
+  -webkit-border-bottom-right-radius: 6px;
+          border-bottom-right-radius: 6px;
+  -moz-border-radius-topright: 6px;
+  -moz-border-radius-bottomright: 6px;
+}
+
+.pagination-mini ul > li:first-child > a,
+.pagination-small ul > li:first-child > a,
+.pagination-mini ul > li:first-child > span,
+.pagination-small ul > li:first-child > span {
+  -webkit-border-bottom-left-radius: 3px;
+          border-bottom-left-radius: 3px;
+  -webkit-border-top-left-radius: 3px;
+          border-top-left-radius: 3px;
+  -moz-border-radius-bottomleft: 3px;
+  -moz-border-radius-topleft: 3px;
+}
+
+.pagination-mini ul > li:last-child > a,
+.pagination-small ul > li:last-child > a,
+.pagination-mini ul > li:last-child > span,
+.pagination-small ul > li:last-child > span {
+  -webkit-border-top-right-radius: 3px;
+          border-top-right-radius: 3px;
+  -webkit-border-bottom-right-radius: 3px;
+          border-bottom-right-radius: 3px;
+  -moz-border-radius-topright: 3px;
+  -moz-border-radius-bottomright: 3px;
+}
+
+.pagination-small ul > li > a,
+.pagination-small ul > li > span {
+  padding: 2px 10px;
+  font-size: 11.9px;
+}
+
+.pagination-mini ul > li > a,
+.pagination-mini ul > li > span {
+  padding: 0 6px;
+  font-size: 10.5px;
+}
+
+.pager {
+  margin: 20px 0;
+  text-align: center;
+  list-style: none;
+  *zoom: 1;
+}
+
+.pager:before,
+.pager:after {
+  display: table;
+  line-height: 0;
+  content: "";
+}
+
+.pager:after {
+  clear: both;
+}
+
+.pager li {
+  display: inline;
+}
+
+.pager li > a,
+.pager li > span {
+  display: inline-block;
+  padding: 5px 14px;
+  background-color: #fff;
+  border: 1px solid #ddd;
+  -webkit-border-radius: 15px;
+     -moz-border-radius: 15px;
+          border-radius: 15px;
+}
+
+.pager li > a:hover,
+.pager li > a:focus {
+  text-decoration: none;
+  background-color: #f5f5f5;
+}
+
+.pager .next > a,
+.pager .next > span {
+  float: right;
+}
+
+.pager .previous > a,
+.pager .previous > span {
+  float: left;
+}
+
+.pager .disabled > a,
+.pager .disabled > a:hover,
+.pager .disabled > a:focus,
+.pager .disabled > span {
+  color: #999999;
+  cursor: default;
+  background-color: #fff;
+}
+
+.modal-backdrop {
+  position: fixed;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  z-index: 1040;
+  background-color: #000000;
+}
+
+.modal-backdrop.fade {
+  opacity: 0;
+}
+
+.modal-backdrop,
+.modal-backdrop.fade.in {
+  opacity: 0.8;
+  filter: alpha(opacity=80);
+}
+
+.modal {
+  position: fixed;
+  top: 10%;
+  left: 50%;
+  z-index: 1050;
+ width: 560px;
+margin-left: -280px;
+
+  background-color: #ffffff;
+  border: 1px solid #999;
+  border: 1px solid rgba(0, 0, 0, 0.3);
+  *border: 1px solid #999;
+  -webkit-border-radius: 6px;
+     -moz-border-radius: 6px;
+          border-radius: 6px;
+  outline: none;
+  -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+     -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+          box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+  -webkit-background-clip: padding-box;
+     -moz-background-clip: padding-box;
+          background-clip: padding-box;
+}
+.modal2 {
+  position: fixed;
+top: 10%;
+ /*   left: 50%;*/
+  z-index: 1050;
+  width: 80%;
+  margin:0 10%;
+/*  margin-left: -280px;*/
+  background-color: #ffffff;
+  border: 1px solid #999;
+  border: 1px solid rgba(0, 0, 0, 0.3);
+  *border: 1px solid #999;
+  -webkit-border-radius: 6px;
+     -moz-border-radius: 6px;
+          border-radius: 6px;
+  outline: none;
+  -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+     -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+          box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+  -webkit-background-clip: padding-box;
+     -moz-background-clip: padding-box;
+          background-clip: padding-box;
+}
+
+.modal-copy {
+  position: fixed;
+top: 10%;
+ /*   left: 50%;*/
+  z-index: 1050;
+  width: 70%;
+ margin:0 1%;
+  background-color: #ffffff;
+  border: 1px solid #999;
+  border: 1px solid rgba(0, 0, 0, 0.3);
+  *border: 1px solid #999;
+  -webkit-border-radius: 6px;
+     -moz-border-radius: 6px;
+          border-radius: 6px;
+  outline: none;
+  -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+     -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+          box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+  -webkit-background-clip: padding-box;
+     -moz-background-clip: padding-box;
+          background-clip: padding-box;
+}
+.modal.fade {
+  top: -25%;
+  -webkit-transition: opacity 0.3s linear, top 0.3s ease-out;
+     -moz-transition: opacity 0.3s linear, top 0.3s ease-out;
+       -o-transition: opacity 0.3s linear, top 0.3s ease-out;
+          transition: opacity 0.3s linear, top 0.3s ease-out;
+}
+
+.modal.fade.in {
+  top: 10%;
+}
+
+.modal-header {
+  padding: 9px 15px;
+  border-bottom: 1px solid #eee;
+}
+
+.modal-header .close {
+  margin-top: 2px;
+}
+
+.modal-header h3 {
+  margin: 0;
+  line-height: 30px;
+}
+
+.modal-body {
+  position: relative;
+  max-height: 440px;
+  padding: 15px;
+  overflow-y: hidden;
+}
+
+.modal-form {
+  margin-bottom: 0;
+}
+
+.modal-footer {
+  padding: 14px 15px 15px;
+  margin-bottom: 0;
+  text-align: right;
+  background-color: #f5f5f5;
+  border-top: 1px solid #ddd;
+  -webkit-border-radius: 0 0 6px 6px;
+     -moz-border-radius: 0 0 6px 6px;
+          border-radius: 0 0 6px 6px;
+  *zoom: 1;
+  -webkit-box-shadow: inset 0 1px 0 #ffffff;
+     -moz-box-shadow: inset 0 1px 0 #ffffff;
+          box-shadow: inset 0 1px 0 #ffffff;
+}
+
+.modal-footer:before,
+.modal-footer:after {
+  display: table;
+  line-height: 0;
+  content: "";
+}
+
+.modal-footer:after {
+  clear: both;
+}
+
+.modal-footer .btn + .btn {
+  margin-bottom: 0;
+  margin-left: 5px;
+}
+
+.modal-footer .btn-group .btn + .btn {
+  margin-left: -1px;
+}
+
+.modal-footer .btn-block + .btn-block {
+  margin-left: 0;
+}
+
+.tooltip {
+  position: absolute;
+  z-index: 1030;
+  display: block;
+  font-size: 11px;
+  line-height: 1.4;
+  opacity: 0;
+  filter: alpha(opacity=0);
+  visibility: visible;
+}
+
+.tooltip.in {
+  opacity: 0.8;
+  filter: alpha(opacity=80);
+}
+
+.tooltip.top {
+  padding: 5px 0;
+  margin-top: -3px;
+}
+
+.tooltip.right {
+  padding: 0 5px;
+  margin-left: 3px;
+}
+
+.tooltip.bottom {
+  padding: 5px 0;
+  margin-top: 3px;
+}
+
+.tooltip.left {
+  padding: 0 5px;
+  margin-left: -3px;
+}
+
+.tooltip-inner {
+  max-width: 200px;
+  padding: 8px;
+  color: #ffffff;
+  text-align: center;
+  text-decoration: none;
+  background-color: #000000;
+/*  -webkit-border-radius: 4px;
+     -moz-border-radius: 4px;
+          border-radius: 4px;*/
+}
+
+.tooltip-arrow {
+  position: absolute;
+  width: 0;
+  height: 0;
+  border-color: transparent;
+  border-style: solid;
+}
+
+.tooltip.top .tooltip-arrow {
+  bottom: 0;
+  left: 50%;
+  margin-left: -5px;
+  border-top-color: #000000;
+  border-width: 5px 5px 0;
+}
+
+.tooltip.right .tooltip-arrow {
+  top: 50%;
+  left: 0;
+  margin-top: -5px;
+  border-right-color: #000000;
+  border-width: 5px 5px 5px 0;
+}
+
+.tooltip.left .tooltip-arrow {
+  top: 50%;
+  right: 0;
+  margin-top: -5px;
+  border-left-color: #000000;
+  border-width: 5px 0 5px 5px;
+}
+
+.tooltip.bottom .tooltip-arrow {
+  top: 0;
+  left: 50%;
+  margin-left: -5px;
+  border-bottom-color: #000000;
+  border-width: 0 5px 5px;
+}
+
+.popover {
+	width:245px;
+  position: absolute;
+  top: 0;
+ left: 0;
+ z-index: 1010;
+  display: none;
+/* max-width: 265px;
+*/ padding: 1px;
+  text-align: left;
+  white-space: normal;
+  background-color: #ffffff;
+  border: 1px solid #ccc;
+  border: 1px solid rgba(0, 0, 0, 0.2);
+  word-wrap: break-word;
+  -webkit-border-radius: 6px;
+     -moz-border-radius: 6px;
+          border-radius: 6px;
+  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+     -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+          box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+  -webkit-background-clip: padding-box;
+     -moz-background-clip: padding;
+          background-clip: padding-box;
+}
+.popover.top {
+  margin-top: -10px;
+}
+
+.popover.right {
+  margin-left: 10px;
+}
+
+.popover.bottom {
+  margin-top: 10px;
+}
+
+.popover.left {
+  margin-left: -10px;
+}
+
+.popover-title {
+	width:215px;
+  padding: 9px 15px;
+  margin:0;
+  float:left;
+  font-size: 15px;
+  font-weight: bold;
+  line-height: 18px;
+  background-color: #f7f7f7;
+  border-bottom: 1px solid #ebebeb;
+  -webkit-border-radius: 5px 5px 0 0;
+     -moz-border-radius: 5px 5px 0 0;
+          border-radius: 5px 5px 0 0;
+}
+.popover-list{
+  padding: 5px 14px;
+  border-bottom:1px solid #ebebeb;
+  float:left;
+}
+.popover-list.wit{ width:237px;}
+.popover-button{
+	line-height:42px;
+	text-align:center;
+	margin-bottom:5px;
+}
+.popover-button i{ margin:0 3px;}
+.popover-title:empty {
+  display: none;
+}
+
+.popover-content{
+}
+.popover-content a{
+padding:5px 13px;
+text-align:center;
+margin:6px 8px;
+border:#949494 solid 1px;
+background-image: -moz-linear-gradient(top, #eaeaea, #bbbbbb);
+background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#eaeaea), to(#bbbbbb));
+background-image: -webkit-linear-gradient(top, #eaeaea, #bbbbbb);
+background-image: -o-linear-gradient(top, #eaeaea, #bbbbbb);
+background-image: linear-gradient(to bottom, #eaeaea, #bbbbbb);
+/*text-shadow:0px 0px 1px #fff;
+*/box-shadow:0 1px 0 rgba(255, 255, 255, 0.2) inset, 0 1px 2px rgba(0, 0, 0, 0.1);
+color:#333333;
+border-radius:2px;
+display:block;
+float:left;
+}
+.popover-content a:hover{
+border:#455565 solid 1px;
+background-image: -moz-linear-gradient(top, #6d7c8b, #5d6d7d);
+background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#6d7c8b), to(#5d6d7d));
+background-image: -webkit-linear-gradient(top, #6d7c8b, #5d6d7d);
+background-image: -o-linear-gradient(top, #6d7c8b, #5d6d7d);
+background-image: linear-gradient(to bottom, #6d7c8b, #5d6d7d);
+color:#fff;
+}
+.popover-content a.curr{
+border:#455565 solid 1px;
+background:#5d6d7d;
+background-image: -moz-linear-gradient(top, #6d7c8b, #5d6d7d);
+background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#6d7c8b), to(#5d6d7d));
+background-image: -webkit-linear-gradient(top, #6d7c8b, #5d6d7d);
+background-image: -o-linear-gradient(top, #6d7c8b, #006baa);
+background-image: linear-gradient(to bottom, #6d7c8b, #5d6d7d);
+color:#fff;	5d6d7d
+}
+
+.popover-content2{
+}
+.popover-content2 a{
+width:60px; height:28px;
+line-height:28px;
+display:block;
+text-align:center;
+margin:6px 8px;
+border:#c1c1c1 solid 1px;
+background-image: -moz-linear-gradient(top, #f9f9f7, #e8e8e5);
+background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f9f9f7), to(#e8e8e5));
+background-image: -webkit-linear-gradient(top, #f9f9f7, #e8e8e5);
+background-image: -o-linear-gradient(top, #f9f9f7, #e8e8e5);
+background-image: linear-gradient(to bottom, #f9f9f7, #e8e8e5);
+/*text-shadow:0px 0px 1px #fff;
+*/box-shadow:0 1px 0 rgba(255, 255, 255, 0.2) inset, 0 1px 2px rgba(0, 0, 0, 0.1);
+color:#333333;
+border-radius:2px;
+float:left;
+}
+.popover-content2 a:hover{
+border:#004898 solid 1px;
+background-image: -moz-linear-gradient(top, #0082cb, #006baa);
+background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0082cb), to(#006baa));
+background-image: -webkit-linear-gradient(top, #0082cb, #006baa);
+background-image: -o-linear-gradient(top, #0082cb, #006baa);
+background-image: linear-gradient(to bottom, #0082cb, #006baa);
+color:#fff;
+}
+.popover-content2 a.curr{
+border:#004898 solid 1px;
+background:#006baa;
+background-image: -moz-linear-gradient(top, #0082cb, #006baa);
+background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0082cb), to(#006baa));
+background-image: -webkit-linear-gradient(top, #0082cb, #006baa);
+background-image: -o-linear-gradient(top, #0082cb, #006baa);
+background-image: linear-gradient(to bottom, #0082cb, #006baa);
+color:#fff;	
+}
+
+
+.popover .arrow,
+.popover .arrow:after {
+  position: absolute;
+  display: block;
+  width: 0;
+  height: 0;
+  border-color: transparent;
+  border-style: solid;
+}
+
+.popover .arrow {
+  border-width: 11px;
+}
+
+.popover .arrow:after {
+  border-width: 10px;
+  content: "";
+}
+
+.popover.top .arrow {
+  bottom: -11px;
+  left: 50%;
+  margin-left: -11px;
+  border-top-color: #999;
+  border-top-color: rgba(0, 0, 0, 0.25);
+  border-bottom-width: 0;
+}
+
+.popover.top .arrow:after {
+  bottom: 1px;
+  margin-left: -10px;
+  border-top-color: #ffffff;
+  border-bottom-width: 0;
+}
+
+.popover.right .arrow {
+  top: 50%;
+  left: -11px;
+  margin-top: -11px;
+  border-right-color: #999;
+  border-right-color: rgba(0, 0, 0, 0.25);
+  border-left-width: 0;
+}
+
+.popover.right .arrow:after {
+  bottom: -10px;
+  left: 1px;
+  border-right-color: #ffffff;
+  border-left-width: 0;
+}
+
+.popover.bottom .arrow {
+  top: -11px;
+  left: 50%;
+  margin-left: -11px;
+  border-bottom-color: #999;
+  border-bottom-color: rgba(0, 0, 0, 0.25);
+  border-top-width: 0;
+}
+
+.popover.bottom .arrow:after {
+  top: 1px;
+  margin-left: -10px;
+  border-bottom-color: #ffffff;
+  border-top-width: 0;
+}
+
+.popover.left .arrow {
+  top: 50%;
+  right: -11px;
+  margin-top: -11px;
+  border-left-color: #999;
+  border-left-color: rgba(0, 0, 0, 0.25);
+  border-right-width: 0;
+}
+
+.popover.left .arrow:after {
+  right: 1px;
+  bottom: -10px;
+  border-left-color: #ffffff;
+  border-right-width: 0;
+}
+
+
+
+.thumbnails {
+  margin-left: -20px;
+  list-style: none;
+  *zoom: 1;
+}
+
+.thumbnails:before,
+.thumbnails:after {
+  display: table;
+  line-height: 0;
+  content: "";
+}
+
+.thumbnails:after {
+  clear: both;
+}
+
+.row-fluid .thumbnails {
+  margin-left: 0;
+}
+
+.thumbnails > li {
+  float: left;
+}
+.row-fluid .entry-w{ width:980px; margin:0 auto; font-family:"微软雅黑";}
+.thumbnail {
+  display: block;
+  padding: 16px 35px;
+  margin:150px 20px;
+  line-height: 20px;
+  border: 1px solid #bce8f1;
+   background-image: -moz-linear-gradient(top, #f0f9fd, #c8e5f3);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f0f9fd), to(#c8e5f3));
+  background-image: -webkit-linear-gradient(top, #f0f9fd, #c8e5f3);
+  background-image: -o-linear-gradient(top, #f0f9fd, #c8e5f3);
+  background-image: linear-gradient(to bottom, #f0f9fd, #c8e5f3);
+  box-shadow:0 1px 0 rgba(255, 255, 255, 0.8) inset, 0 1px 2px rgba(0, 0, 0, 0.05);/*
+  -webkit-border-radius: 4px;
+     -moz-border-radius: 4px;
+          border-radius: 4px;*/
+  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055);
+     -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055);
+          box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055);
+  -webkit-transition: all 0.2s ease-in-out;
+     -moz-transition: all 0.2s ease-in-out;
+       -o-transition: all 0.2s ease-in-out;
+          transition: all 0.2s ease-in-out;
+}
+
+a.thumbnail:hover,
+a.thumbnail:focus {
+  background-image: -moz-linear-gradient(top, #e5f6ff, #9cd6f3);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#e5f6ff), to(#9cd6f3));
+  background-image: -webkit-linear-gradient(top, #e5f6ff, #9cd6f3);
+  background-image: -o-linear-gradient(top, #e5f6ff, #9cd6f3);
+  background-image: linear-gradient(to bottom, #e5f6ff, #9cd6f3);
+  box-shadow:0 1px 0 rgba(255, 255, 255, 0.8) inset, 0 1px 2px rgba(0, 0, 0, 0.05);
+  border-color: #85c1e0;
+  -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
+     -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
+          box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
+}
+
+.thumbnail > img {
+  display: block;
+  max-width: 100%;
+  margin-right: auto;
+  margin-left: auto;
+}
+
+.thumbnail .caption {
+  padding: 9px;
+  color: #383838;
+  text-align:center;
+
+
+}
+
+.media,
+.media-body {
+  overflow: hidden;
+  *overflow: visible;
+  zoom: 1;
+}
+
+.media,
+.media .media {
+  margin-top: 15px;
+}
+
+.media:first-child {
+  margin-top: 0;
+}
+
+.media-object {
+  display: block;
+}
+
+.media-heading {
+  margin: 0 0 5px;
+}
+
+.media > .pull-left {
+  margin-right: 10px;
+}
+
+.media > .pull-right {
+  margin-left: 10px;
+}
+
+.media-list {
+  margin-left: 0;
+  list-style: none;
+}
+
+.label,
+.badge {
+  display: inline-block;
+  padding: 2px 4px;
+  font-size: 11.844px;
+  font-weight: bold;
+  line-height: 14px;
+  color: #ffffff;
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+  white-space: nowrap;
+  vertical-align: baseline;
+  background-color: #999999;
+}
+
+.label {
+  -webkit-border-radius: 3px;
+     -moz-border-radius: 3px;
+          border-radius: 3px;
+}
+
+.badge {
+  padding-right: 9px;
+  padding-left: 9px;
+  -webkit-border-radius: 9px;
+     -moz-border-radius: 9px;
+          border-radius: 9px;
+}
+
+.label:empty,
+.badge:empty {
+  display: none;
+}
+
+a.label:hover,
+a.label:focus,
+a.badge:hover,
+a.badge:focus {
+  color: #ffffff;
+  text-decoration: none;
+  cursor: pointer;
+}
+
+.label-important,
+.badge-important {
+  background-color: #b94a48;
+}
+
+.label-important[href],
+.badge-important[href] {
+  background-color: #953b39;
+}
+
+.label-warning,
+.badge-warning {
+  background-color: #f89406;
+}
+
+.label-warning[href],
+.badge-warning[href] {
+  background-color: #c67605;
+}
+
+.label-success,
+.badge-success {
+  background-color: #468847;
+}
+
+.label-success[href],
+.badge-success[href] {
+  background-color: #356635;
+}
+
+.label-info,
+.badge-info {
+  background-color: #3a87ad;
+}
+
+.label-info[href],
+.badge-info[href] {
+  background-color: #2d6987;
+}
+
+.label-inverse,
+.badge-inverse {
+  background-color: #333333;
+}
+
+.label-inverse[href],
+.badge-inverse[href] {
+  background-color: #1a1a1a;
+}
+
+.btn .label,
+.btn .badge {
+  position: relative;
+  top: -1px;
+}
+
+.btn-mini .label,
+.btn-mini .badge {
+  top: 0;
+}
+
+@-webkit-keyframes progress-bar-stripes {
+  from {
+    background-position: 40px 0;
+  }
+  to {
+    background-position: 0 0;
+  }
+}
+
+@-moz-keyframes progress-bar-stripes {
+  from {
+    background-position: 40px 0;
+  }
+  to {
+    background-position: 0 0;
+  }
+}
+
+@-ms-keyframes progress-bar-stripes {
+  from {
+    background-position: 40px 0;
+  }
+  to {
+    background-position: 0 0;
+  }
+}
+
+@-o-keyframes progress-bar-stripes {
+  from {
+    background-position: 0 0;
+  }
+  to {
+    background-position: 40px 0;
+  }
+}
+
+@keyframes progress-bar-stripes {
+  from {
+    background-position: 40px 0;
+  }
+  to {
+    background-position: 0 0;
+  }
+
+.progress {
+  height: 20px;
+  margin-bottom: 20px;
+  overflow: hidden;
+  background-color: #f7f7f7;
+  background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));
+  background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9);
+  background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9);
+  background-image: linear-gradient(to bottom, #f5f5f5, #f9f9f9);
+  background-repeat: repeat-x;
+/*  -webkit-border-radius: 4px;
+     -moz-border-radius: 4px;
+          border-radius: 4px;*/
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0);
+  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
+     -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
+          box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
+}
+
+.progress .bar {
+  float: left;
+  width: 0;
+  height: 100%;
+  font-size: 12px;
+  color: #ffffff;
+  text-align: center;
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+  background-color: #0e90d2;
+  background-image: -moz-linear-gradient(top, #149bdf, #0480be);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));
+  background-image: -webkit-linear-gradient(top, #149bdf, #0480be);
+  background-image: -o-linear-gradient(top, #149bdf, #0480be);
+  background-image: linear-gradient(to bottom, #149bdf, #0480be);
+  background-repeat: repeat-x;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0);
+  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
+     -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
+          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+          box-sizing: border-box;
+  -webkit-transition: width 0.6s ease;
+     -moz-transition: width 0.6s ease;
+       -o-transition: width 0.6s ease;
+          transition: width 0.6s ease;
+}
+
+.progress .bar + .bar {
+  -webkit-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15);
+     -moz-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15);
+          box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15);
+}
+
+.progress-striped .bar {
+  background-color: #149bdf;
+  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  -webkit-background-size: 40px 40px;
+     -moz-background-size: 40px 40px;
+       -o-background-size: 40px 40px;
+          background-size: 40px 40px;
+}
+
+.progress.active .bar {
+  -webkit-animation: progress-bar-stripes 2s linear infinite;
+     -moz-animation: progress-bar-stripes 2s linear infinite;
+      -ms-animation: progress-bar-stripes 2s linear infinite;
+       -o-animation: progress-bar-stripes 2s linear infinite;
+          animation: progress-bar-stripes 2s linear infinite;
+}
+
+.progress-danger .bar,
+.progress .bar-danger {
+  background-color: #dd514c;
+  background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));
+  background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);
+  background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);
+  background-image: linear-gradient(to bottom, #ee5f5b, #c43c35);
+  background-repeat: repeat-x;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0);
+}
+
+.progress-danger.progress-striped .bar,
+.progress-striped .bar-danger {
+  background-color: #ee5f5b;
+  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+}
+
+.progress-success .bar,
+.progress .bar-success {
+  background-color: #5eb95e;
+  background-image: -moz-linear-gradient(top, #62c462, #57a957);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));
+  background-image: -webkit-linear-gradient(top, #62c462, #57a957);
+  background-image: -o-linear-gradient(top, #62c462, #57a957);
+  background-image: linear-gradient(to bottom, #62c462, #57a957);
+  background-repeat: repeat-x;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0);
+}
+
+.progress-success.progress-striped .bar,
+.progress-striped .bar-success {
+  background-color: #62c462;
+  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+}
+
+.progress-info .bar,
+.progress .bar-info {
+  background-color: #4bb1cf;
+  background-image: -moz-linear-gradient(top, #5bc0de, #339bb9);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));
+  background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9);
+  background-image: -o-linear-gradient(top, #5bc0de, #339bb9);
+  background-image: linear-gradient(to bottom, #5bc0de, #339bb9);
+  background-repeat: repeat-x;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0);
+}
+
+.progress-info.progress-striped .bar,
+.progress-striped .bar-info {
+  background-color: #5bc0de;
+  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+}
+
+.progress-warning .bar,
+.progress .bar-warning {
+  background-color: #faa732;
+  background-image: -moz-linear-gradient(top, #fbb450, #f89406);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));
+  background-image: -webkit-linear-gradient(top, #fbb450, #f89406);
+  background-image: -o-linear-gradient(top, #fbb450, #f89406);
+  background-image: linear-gradient(to bottom, #fbb450, #f89406);
+  background-repeat: repeat-x;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);
+}
+
+.progress-warning.progress-striped .bar,
+.progress-striped .bar-warning {
+  background-color: #fbb450;
+  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+}
+
+.accordion {
+  margin-bottom: 20px;
+}
+
+.accordion-group {
+  margin-bottom: 2px;
+  border: 1px solid #e5e5e5;
+/*  -webkit-border-radius: 4px;
+     -moz-border-radius: 4px;
+          border-radius: 4px;*/
+}
+
+.accordion-heading {
+  border-bottom: 0;
+}
+
+.accordion-heading .accordion-toggle {
+  display: block;
+  padding: 8px 15px;
+}
+
+.accordion-toggle {
+  cursor: pointer;
+}
+
+.accordion-inner {
+  padding: 9px 15px;
+  border-top: 1px solid #e5e5e5;
+}
+
+.carousel {
+  position: relative;
+  margin-bottom: 20px;
+  line-height: 1;
+}
+
+.carousel-inner {
+  position: relative;
+  width: 100%;
+  overflow: hidden;
+}
+
+.carousel-inner > .item {
+  position: relative;
+  display: none;
+  -webkit-transition: 0.6s ease-in-out left;
+     -moz-transition: 0.6s ease-in-out left;
+       -o-transition: 0.6s ease-in-out left;
+          transition: 0.6s ease-in-out left;
+}
+
+.carousel-inner > .item > img,
+.carousel-inner > .item > a > img {
+  display: block;
+  line-height: 1;
+}
+
+.carousel-inner > .active,
+.carousel-inner > .next,
+.carousel-inner > .prev {
+  display: block;
+}
+
+.carousel-inner > .active {
+  left: 0;
+}
+
+.carousel-inner > .next,
+.carousel-inner > .prev {
+  position: absolute;
+  top: 0;
+  width: 100%;
+}
+
+.carousel-inner > .next {
+  left: 100%;
+}
+
+.carousel-inner > .prev {
+  left: -100%;
+}
+
+.carousel-inner > .next.left,
+.carousel-inner > .prev.right {
+  left: 0;
+}
+
+.carousel-inner > .active.left {
+  left: -100%;
+}
+
+.carousel-inner > .active.right {
+  left: 100%;
+}
+
+.carousel-control {
+  position: absolute;
+  top: 40%;
+  left: 15px;
+  width: 40px;
+  height: 40px;
+  margin-top: -20px;
+  font-size: 60px;
+  font-weight: 100;
+  line-height: 30px;
+  color: #ffffff;
+  text-align: center;
+  background: #222222;
+  border: 3px solid #ffffff;
+  -webkit-border-radius: 23px;
+     -moz-border-radius: 23px;
+          border-radius: 23px;
+  opacity: 0.5;
+  filter: alpha(opacity=50);
+}
+
+.carousel-control.right {
+  right: 15px;
+  left: auto;
+}
+
+.carousel-control:hover,
+.carousel-control:focus {
+  color: #ffffff;
+  text-decoration: none;
+  opacity: 0.9;
+  filter: alpha(opacity=90);
+}
+
+.carousel-indicators {
+  position: absolute;
+  top: 15px;
+  right: 15px;
+  z-index: 5;
+  margin: 0;
+  list-style: none;
+}
+
+.carousel-indicators li {
+  display: block;
+  float: left;
+  width: 10px;
+  height: 10px;
+  margin-left: 5px;
+  text-indent: -999px;
+  background-color: #ccc;
+  background-color: rgba(255, 255, 255, 0.25);
+  border-radius: 5px;
+}
+
+.carousel-indicators .active {
+  background-color: #fff;
+}
+
+.carousel-caption {
+  position: absolute;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  padding: 15px;
+  background: #333333;
+  background: rgba(0, 0, 0, 0.75);
+}
+
+.carousel-caption h4,
+.carousel-caption p {
+  line-height: 20px;
+  color: #ffffff;
+}
+
+.carousel-caption h4 {
+  margin: 0 0 5px;
+}
+
+.carousel-caption p {
+  margin-bottom: 0;
+}
+
+.hero-unit {
+  padding: 60px;
+  margin-bottom: 30px;
+  font-size: 18px;
+  font-weight: 200;
+  line-height: 30px;
+  color: inherit;
+  background-color: #eeeeee;
+  -webkit-border-radius: 6px;
+     -moz-border-radius: 6px;
+          border-radius: 6px;
+}
+
+.hero-unit h1 {
+  margin-bottom: 0;
+  font-size: 60px;
+  line-height: 1;
+  letter-spacing: -1px;
+  color: inherit;
+}
+
+.hero-unit li {
+  line-height: 30px;
+}
+
+.pull-right {
+  float: right;
+}
+
+.pull-left {
+  float: left;
+}
+
+.hide {
+  display: none;
+}
+
+.show {
+  display: block;
+}
+
+.invisible {
+  visibility: hidden;
+}
+
+.affix {
+  position: fixed;
+}

+ 1168 - 0
stmms-web/src/main/webapp/static/mark-leader/css/style.css

@@ -0,0 +1,1168 @@
+@charset "utf-8";
+/* CSS Document */
+html {
+	height: 100%;
+}
+
+body {
+	margin: 0;
+	padding: 0px 0 0 0;
+	font-size: 14px;
+	background: #f5f4f4;
+}
+
+input
+,
+textarea
+,
+{
+margin
+:
+ 
+0;
+padding
+:
+ 
+0;
+font-size
+:
+ 
+14
+px
+;
+
+    
+outline
+:
+ 
+none
+;
+
+
+}
+html:root body,html:root input,html:root button,html:root textarea,html:root select { '
+	font-family: "微软雅黑", Fixedsys;
+	';
+}
+
+form,ul,ol,li,dl,dt,dd,h1,h2,h3,h4,h5,p {
+	margin: 0;
+	padding: 0;
+	list-style: none;
+	ont-style: normal;
+}
+
+fieldset {
+	border-left: none;
+	border-right: none;
+	font-size: 14px;
+	border-top: solid 1px #decfa0;
+	border-bottom: none;
+}
+
+legend {
+	color: #4971b9;
+	margin-left: 10px;
+}
+
+a {
+	text-decoration: none;
+	color: #484848;
+	outline: none;
+}
+
+a:hover {
+	text-decoration: none;
+	color: #279437;
+}
+
+a img {
+	border: none;
+}
+
+i,em {
+	font-style: normal;
+}
+/* 通用样式 */
+.fl {
+	float: left;
+}
+
+.fr {
+	float: right;
+}
+
+.oh {
+	overflow: hidden;
+}
+
+.hd {
+	display: none
+}
+
+.width2 {
+	width: 200px;
+}
+
+.padding5 {
+	padding: 5px;
+}
+
+.padding10 {
+	padding: 10px;
+}
+
+.domain {
+	padding: 3px;
+	min-height: 30px;
+}
+
+.border {
+	border-color: #ccc;
+	border-left: none;
+	border-right: none;
+}
+
+.mr-t {
+	margin-top: 5px;
+}
+
+.mr2-t {
+	margin-top: 10px;
+}
+
+.hide {
+	display: none;
+}
+
+.show {
+	display: block;
+}
+/*回评*/
+.image-view-popover {
+	width: 100%;
+	background: #fff;
+	position: absolute;
+}
+
+.image-view-popover .popover-header {
+	height: 50px;
+	background: #eff3f6;
+	border-bottom: solid 1px #dce0e2;
+}
+
+.image-view-popover .popover-header .title {
+	font-size: 26px;
+	line-height: 46px;
+	font-weight: bold;
+	color: #3163a1;
+	margin-left: 15px;
+	float: left;
+}
+
+.image-view-popover .popover-header .image-switch {
+	float: left;
+	margin: 9px 0px 8px 15px;
+}
+
+.image-view-popover .popover-header .image-switch a {
+	padding: 3px 8px;
+	text-align: center;
+	margin: 3px 5px;
+	border: #c1c1c1 solid 1px;
+	background-image: -moz-linear-gradient(top, #f9f9f7, #e8e8e5);
+	background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f9f9f7), to(#e8e8e5));
+	background-image: -webkit-linear-gradient(top, #f9f9f7, #e8e8e5);
+	background-image: -o-linear-gradient(top, #f9f9f7, #e8e8e5);
+	background-image: linear-gradient(to bottom, #f9f9f7, #e8e8e5);
+	box-shadow: 0 1px 0 rgba(255, 255, 255, 0.2) inset, 0 1px 2px rgba(0, 0, 0, 0.1);
+	color: #333333;
+	border-radius: 2px;
+	display: block;
+	float: left;
+}
+
+.image-view-popover .popover-header .image-switch a:hover {
+	border: #004898 solid 1px;
+	background-image: -moz-linear-gradient(top, #0082cb, #006baa);
+	background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0082cb), to(#006baa));
+	background-image: -webkit-linear-gradient(top, #0082cb, #006baa);
+	background-image: -o-linear-gradient(top, #0082cb, #006baa);
+	background-image: linear-gradient(to bottom, #0082cb, #006baa);
+	color: #fff;
+}
+
+.image-view-popover .popover-header .image-switch a.curr {
+	border: #004898 solid 1px;
+	background: #006baa;
+	background-image: -moz-linear-gradient(top, #0082cb, #006baa);
+	background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0082cb), to(#006baa));
+	background-image: -webkit-linear-gradient(top, #0082cb, #006baa);
+	background-image: -o-linear-gradient(top, #0082cb, #006baa);
+	background-image: linear-gradient(to bottom, #0082cb, #006baa);
+	color: #fff;
+}
+
+.image-view-popover .popover-header .image-control {
+	margin: 9px 15px 8px 15px;
+	float: left;
+}
+
+.image-view-popover .popover-header .image-control a {
+	padding: 3px 8px;
+	text-align: center;
+	margin: 3px 5px;
+	border: #c1c1c1 solid 1px;
+	background-image: -moz-linear-gradient(top, #f9f9f7, #e8e8e5);
+	background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f9f9f7), to(#e8e8e5));
+	background-image: -webkit-linear-gradient(top, #f9f9f7, #e8e8e5);
+	background-image: -o-linear-gradient(top, #f9f9f7, #e8e8e5);
+	background-image: linear-gradient(to bottom, #f9f9f7, #e8e8e5);
+	box-shadow: 0 1px 0 rgba(255, 255, 255, 0.2) inset, 0 1px 2px rgba(0, 0, 0, 0.1);
+	color: #333333;
+	border-radius: 2px;
+	display: block;
+	float: left;
+}
+
+.image-view-popover .popover-header .image-control a:hover {
+	border: #004898 solid 1px;
+	background-image: -moz-linear-gradient(top, #0082cb, #006baa);
+	background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0082cb), to(#006baa));
+	background-image: -webkit-linear-gradient(top, #0082cb, #006baa);
+	background-image: -o-linear-gradient(top, #0082cb, #006baa);
+	background-image: linear-gradient(to bottom, #0082cb, #006baa);
+	color: #fff;
+}
+
+.image-view-popover .popover-header .image-control a.curr {
+	border: #004898 solid 1px;
+	background: #006baa;
+	background-image: -moz-linear-gradient(top, #0082cb, #006baa);
+	background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0082cb), to(#006baa));
+	background-image: -webkit-linear-gradient(top, #0082cb, #006baa);
+	background-image: -o-linear-gradient(top, #0082cb, #006baa);
+	background-image: linear-gradient(to bottom, #0082cb, #006baa);
+	color: #fff;
+}
+
+.image-view-popover .popover-header .image-close {
+	margin-top: 15px;
+	margin-right: 15px;
+	cursor: pointer;
+	float: right;
+}
+
+.image-view-popover .popover-content {
+	padding: 10px;
+}
+
+.image-content {
+	position: relative;
+	overflow: hidden;
+}
+
+.mark-steps {
+	background-color: #cbd0d3;
+	height: 100%;
+}
+
+.mark-steps .header {
+	background-color: #2da5da;
+	height: 40px;
+	line-height: 40px;
+	font-size: 14px;
+	color: #fff;
+	text-align: center;
+	white-space: nowrap;
+}
+
+.mark-steps .header .useinfo {
+	width: 55%;
+	color: #fff;
+	padding: 0 5px 0 10px;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	white-space: nowrap;
+	display: block;
+	float: left;
+}
+
+.mark-steps .header .logout {
+	width: 30%;
+	color: #fff;
+	padding: 0 20px 0 5px;
+}
+
+.mark-steps .tips {
+	padding: 5px;
+}
+
+.mark-steps .tips .tools {
+	
+}
+
+.mark-steps .tips .setp {
+	margin-top: 5px;
+}
+
+.mark-steps .tips .text {
+	padding: 0 55px;
+	line-height: 28px;
+}
+
+.mark-steps .tips .on {
+	width: 74px;
+	height: 28px;
+	background: url(../images/on.png) no-repeat;
+	display: block;
+	margin-left: 50px;
+}
+
+.mark-steps .tips .off {
+	width: 74px;
+	height: 28px;
+	background: url(../images/off.png) no-repeat;
+	display: block;
+	margin-left: 50px;
+}
+/*键盘给分*/
+.mark-steps .step-board {
+	padding: 5px 5px 5px 5px;
+}
+
+.mark-steps .step-board .step-list {
+	position: relative;
+	overflow: hidden;
+}
+
+.mark-steps .step-board .header {
+	color: #fff;
+	font-size: 14px;
+	font-weight: bold;
+	background: #5d6d7d;
+	height: 16px;
+	line-height: 16px;
+	text-align: center;
+	display: block;
+}
+
+.mark-steps .step-board .sublist {
+	
+}
+
+.mark-steps .step-board .sublist .fraction {
+	background: #ececec;
+	height: 39px;
+	line-height: 39px;
+	color: #ed5321;
+	display: block;
+	text-align: center;
+	font-family: "微软雅黑";
+	font-size: 30px;
+	font-weight: bold;
+	margin: 4px 0;
+}
+.mark-steps .step-board .newSubListCss{height: 20px;line-height: 19px; color: #333; display: block;text-align: center; font-family: "微软雅黑"; font-size: 16px; font-weight: normal; margin: 5px 0 5px 0;}
+.mark-steps .step-board .newSubListCss .red{ color: #ed5321; font-weight: bold; font-size: 16px; }
+/*.sidebar .step-list .sublist .up{ height:27px; text-align:center; cursor:pointer;}
+.sidebar .step-list .sublist .down{height:22px; text-align:center; cursor:pointer;}*/
+.mark-steps .step-board .step-list .done {
+	width: 100%;
+	height: 118px;
+	background: #c6fde7;
+	margin-bottom: 5px;
+}
+
+.mark-steps .step-board .step-list .done .number {
+	-webkit-box-sizing: border-box;
+	width: 49%;
+	height: 118px;
+	float: left;
+	border-right: #ced0ce dashed 1px;
+}
+
+.mark-steps .step-board .step-list .done .number .title {
+	height: 30px;
+	border-bottom: #ced0ce dashed 1px;
+	font-weight: bold;
+	color: #309c52;
+	text-align: center;
+	line-height: 30px;
+}
+
+.mark-steps .step-board .step-list .done .number .num {
+	height: 88px;
+	font-weight: bold;
+	font-size: 40px;
+	color: #ed5321;
+	text-align: center;
+	line-height: 88px;
+}
+
+.mark-steps .step-board .step-list .done .score {
+	width: 50%;
+	height: 118px;
+	float: right;
+	text-align: center;
+	-webkit-box-sizing: border-box;
+}
+
+.mark-steps .step-board .step-list .done .score .title {
+	font-weight: bold;
+	width: 100%;
+	height: 30px;
+	line-height: 30px;
+	color: #309c52;
+	margin-bottom: 5px;
+}
+
+.mark-steps .step-board .step-list .done .score .icon {
+	width: 100%;
+	height: 27px;
+	float: right;
+	font-size: 22px;
+	color: #309c52;
+}
+
+.mark-steps .step-board .step-list .done .score .num {
+	font-weight: bold;
+	width: 100%;
+	height: 24px;
+	float: right;
+	font-size: 30px;
+	color: #309c52;
+}
+
+.mark-steps .step-board .step-list .current {
+	width: 100%;
+	height: 118px;
+	background: #ffe2d7;
+	margin-bottom: 5px;
+}
+
+.mark-steps .step-board .step-list .current .number {
+	-webkit-box-sizing: border-box;
+	width: 49%;
+	height: 118px;
+	float: left;
+	border-right: #ced0ce dashed 1px;
+}
+
+.mark-steps .step-board .step-list .current .number .title {
+	height: 30px;
+	border-bottom: #ced0ce dashed 1px;
+	font-weight: bold;
+	color: #309c52;
+	text-align: center;
+	line-height: 30px;
+}
+
+.mark-steps .step-board .step-list .current .number .num {
+	height: 88px;
+	font-weight: bold;
+	font-size: 40px;
+	color: #ed5321;
+	text-align: center;
+	line-height: 88px;
+}
+
+.mark-steps .step-board .step-list .current .score {
+	width: 50%;
+	height: 118px;
+	float: right;
+	text-align: center;
+	-webkit-box-sizing: border-box;
+}
+
+.mark-steps .step-board .step-list .current .score .title {
+	font-weight: bold;
+	width: 100%;
+	height: 30px;
+	line-height: 30px;
+	color: #309c52;
+	margin-bottom: 5px;
+}
+
+.mark-steps .step-board .step-list .current .score .icon {
+	width: 100%;
+	height: 27px;
+	float: right;
+	font-size: 22px;
+	color: #309c52;
+}
+
+.mark-steps .step-board .step-list .current .score .num {
+	font-weight: bold;
+	width: 100%;
+	height: 24px;
+	float: right;
+	font-size: 30px;
+	color: #309c52;
+}
+
+.mark-steps .step-board .step-list .todo {
+	width: 100%;
+	height: 118px;
+	background: #e0e2e4;
+	margin-bottom: 5px;
+}
+
+.mark-steps .step-board .step-list .todo .number {
+	-webkit-box-sizing: border-box;
+	width: 49%;
+	height: 118px;
+	float: left;
+	border-right: #ced0ce dashed 1px;
+}
+
+.mark-steps .step-board .step-list .todo .number .title {
+	height: 30px;
+	border-bottom: #ced0ce dashed 1px;
+	font-weight: bold;
+	color: #8d8d8d;
+	text-align: center;
+	line-height: 30px;
+}
+
+.mark-steps .step-board .step-list .todo .number .num {
+	height: 88px;
+	font-weight: bold;
+	font-size: 40px;
+	color: #8d8d8d;
+	text-align: center;
+	line-height: 88px;
+}
+
+.mark-steps .step-board .step-list .todo .score {
+	width: 50%;
+	height: 118px;
+	float: right;
+	text-align: center;
+	-webkit-box-sizing: border-box;
+}
+
+.mark-steps .step-board .step-list .todo .score .title {
+	font-weight: bold;
+	width: 100%;
+	height: 30px;
+	line-height: 30px;
+	color: #8d8d8d;
+	margin-bottom: 5px;
+}
+
+.mark-steps .step-board .step-list .todo .score .icon {
+	width: 100%;
+	height: 27px;
+	float: right;
+	font-size: 22px;
+	color: #8d8d8d;
+}
+
+.mark-steps .step-board .step-list .todo .score .num {
+	font-weight: bold;
+	width: 100%;
+	height: 24px;
+	float: right;
+	font-size: 30px;
+	color: #8d8d8d;
+}
+/*分值列表*/
+.score-board {
+	width: 283px;
+}
+
+.score-board .header {
+	width: 273px;
+	height: 39px;
+	padding: 0 5px;
+	background-color: #5d6d7d;
+	line-height: 39px;
+	font-size: 14px;
+	color: #fff;
+	font-weight: bold;
+	cursor: pointer;
+	float: left;
+}
+
+.score-board .header .span1 {
+	width: 120px;
+}
+
+.score-board .header-close {
+	margin-top: 10px;
+	float: right;
+}
+
+.score-board .header-text {
+	margin-top: -10px;
+	float: right;
+	color: #fff;
+}
+
+.score-board .footer {
+	width: 263px;
+	height: 39px;
+	line-height: 39px;
+	font-weight: bold;
+	color: #fff;
+	padding: 0 10px;
+	background: #5d6d7d;
+	float: left;
+}
+
+.score-board .footer .font {
+	font-size: 22px;
+	text-align: left;
+	font-family: "微软雅黑", Fixedsys;
+	float: left;
+}
+
+.score-board .footer .yellow {
+	color: #ffd800;
+}
+
+.score-board .footer .button {
+	width: 55px;
+	height: 26px;
+	line-height: 26px;
+	text-align: center;
+	margin-top: 7px;
+	margin-left: 5px;
+	color: #fff;
+	font-size: 16px;
+	font-weight: bold;
+	background: #ed5321;
+	display: block;
+	float: right;
+}
+
+.score-board .content {
+	width: 271px;
+	border: solid 1px #5d6d7d;
+	background: #e6eaed;
+	padding: 5px;
+	float: left;
+}
+
+.score-board .content .sublist {
+	width: 271px;
+	margin: 2px 0;
+	float: left;
+}
+
+.score-board .content .sublist:hover {
+	background: #fce9ce;
+}
+
+.score-board .content .sublist .number {
+	width: 55px;
+	padding: 4px 0;
+	font-size: 12px;
+	font-weight: bold;
+	color: #46565f;
+	word-wrap: break-word;
+	float: left;
+	text-align: right;
+}
+
+.score-board .content .sublist .fraction {
+	width: 211px;
+	margin-left: 5px;
+	word-wrap: break-word;
+	float: right;
+	text-align: left;
+}
+
+.score-board .content .sublist .fraction a {
+	width: 24px;
+	height: 24px;
+	line-height: 24px;
+	margin: 2px;
+	font-size: 12px;
+	color: #333333;
+	background: #d0d5d9;
+	border: solid 1px #9ea3a7;
+	text-align: center;
+	display: block;
+	float: left;
+}
+
+.score-board .content .sublist .fraction a:hover {
+	background: #ed5321;
+	color: #fff;
+	border: #ed5321 solid 1px;
+}
+
+.score-board .content .sublist .fraction a.active {
+	background: #ed5321;
+	color: #fff;
+	border: #ed5321 solid 1px;
+}
+
+.score-board-popover {
+	float: right;
+	top: 48px;
+	right: 15.3%;
+	position: absolute;
+}
+/*回评列表*/
+.mark-sidebar {
+	background-color: #cbd0d3;
+	height: 100%;
+}
+
+.mark-sidebar .header {
+	background-color: #46617b;
+	height: 40px;
+	line-height: 40px;
+	font-size: 20px;
+	border-bottom: #46617b solid 1px;
+	color: #fff;
+	text-align: center;
+}
+
+.mark-sidebar .header p {
+	float: left;
+	padding: 0 10px;
+}
+
+.mark-sidebar .header a {
+	float: right;
+	padding: 15px 10px 0 0;
+}
+
+.mark-sidebar .header .yellow {
+	color: #ffd800;
+}
+
+.mark-sidebar .m-pagination {
+	padding: 11px 0;
+	text-align: center;
+}
+
+.mark-sidebar .m-pagination a {
+	padding: 5px 8px;
+	text-align: center;
+	color: #fff;
+	font-size: 14px;
+	background: #5a7686;
+	margin: 0 5px;
+	text-align: center;
+}
+
+.mark-sidebar .m-pagination a:hover {
+	background: #ed5321;
+}
+
+.mark-sidebar .m-pagination a.active {
+	background: #ed5321;
+}
+
+.mark-sidebar .m-pagination {
+	padding: 11px 0;
+	text-align: center;
+}
+
+.mark-sidebar .m-pagination i {
+	padding: 5px 8px;
+	text-align: center;
+	color: #fff;
+	font-size: 14px;
+	background: #acacac;
+	margin: 0 5px;
+	text-align: center;
+}
+
+.mark-sidebar .sublist {
+	
+}
+
+.mark-sidebar .sublist .titel {
+	background: #2da5da;
+	height: 37px;
+	line-height: 37px;
+	color: #fff;
+	border: #2297cc solid 1px;
+	text-align: center;
+}
+/*图片内容区开始*/
+.center-content {
+	
+}
+
+.center-content .header {
+	background: #5d6d7d;
+	color: #fff;
+	height: 21px;
+	padding: 10px;
+}
+
+.center-content .header .text {
+	color: #fff;
+	font-size: 16px;
+	font-weight: bold;
+	text-overflow: ellipsis;
+	white-space: nowrap;
+	float: left;
+}
+
+.center-content .header .text i {
+	padding: 0 2px;
+}
+
+.center-content .header .text em {
+	color: #ffe400;
+}
+/*.center-content .header .pictures{ color:#fff; margin-left:10px; cursor:pointer; float:left;}
+.center-content .header .pictures .L-btn{ background:#cbd0d3; width:93px; height:28px; padding:5px 10px; color:#4b555e; font-weight:bold;}
+.center-content .header .pictures .M-btn{ background:#e0e2e4; height:28px; padding:5px 10px; color:#354f67;}*/
+.center-content .header .header-btn {
+	
+}
+
+.center-content .header .btn {
+	background: #cbd0d3;
+	padding: 3px 6px 3px 6px;
+	margin: -3px 2px 2px 1px;
+	color: #4b555e;
+	font-weight: bold;
+	float: left;
+}
+/*.center-content .header .fraction{ font-size:36px; font-family:Arial, Helvetica, sans-serif; font-weight:bold; color:#008f58; text-align:right; float:right;}
+*/
+.center-content .header .fraction .active {
+	font-size: 45px;
+	color: #f53c00;
+}
+
+.center-content .tips {
+	word-wrap: break-word;
+	text-align: left;
+	float: right;
+}
+/*.center-content .tips .help{ width:25%;color:#fff; padding:0 5px 0 5px; float:left;}
+*/
+.center-content .tips .useinfo {
+	color: #fff;
+	padding: 0 5px 0 10px;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	white-space: nowrap;
+	display: block;
+	float: left;
+}
+
+.center-content .tips .logout {
+	color: #fff;
+	padding: 0 5px 0 5px;
+	float: left;
+}
+
+.center-content .content {
+	height: 100%;
+	margin: 0;
+	padding: 0;
+	overflow: hidden;
+	position: relative;
+}
+/*从这里开始是评卷详细信息*/
+.mark-detail {
+	
+}
+
+.mark-detail .m-close {
+	font-size: 17.5px;
+	font-weight: bold;
+	color: #006998;
+	padding: 11px 19px;
+	background: #91d2f0;
+	cursor: pointer;
+	float: right;
+}
+
+.mark-detail .m-open {
+	font-size: 17.5px;
+	font-weight: bold;
+	color: #0079af;
+	padding: 11px 19px;
+	background: #b5e3f8;
+	float: right;
+}
+
+.mark-detail .m-open .yellow {
+	color: #ed5321;
+}
+
+.mark-detail-float {
+	float: right;
+	bottom: 5px;
+	right: 15.3%;
+	position: absolute;
+}
+/*小助手样式*/
+.assistant {
+	position: absolute;
+}
+/*图片属性*/
+.image-popover {
+	
+}
+
+.image-popover .image-control {
+	width: 330px;
+	border: #c4e0ed solid 1px;
+	background: #f2fbff;
+	float: left;
+}
+
+.image-popover .image-control .control-row {
+	width: 310px;
+	padding: 5px 6px;
+	float: left;
+}
+
+.image-popover .image-control .control-row .title {
+	width: 60px;
+	font-weight: bold;
+	font-size: 14px;
+	color: #006d9d;
+	font-family: "宋体";
+	margin-top: 10px;
+	text-align: right;
+	float: left;
+}
+
+.image-popover .image-control .control-row .content {
+	width: 250px;
+	word-wrap: break-word;
+	float: left;
+}
+
+.image-popover .image-control .control-row .content a {
+	padding: 6px 12px;
+	text-align: center;
+	margin: 3px 5px;
+	border: #c1c1c1 solid 1px;
+	background-image: -moz-linear-gradient(top, #f9f9f7, #e8e8e5);
+	background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f9f9f7), to(#e8e8e5));
+	background-image: -webkit-linear-gradient(top, #f9f9f7, #e8e8e5);
+	background-image: -o-linear-gradient(top, #f9f9f7, #e8e8e5);
+	background-image: linear-gradient(to bottom, #f9f9f7, #e8e8e5);
+	/*text-shadow:0px 0px 1px #fff;
+*/
+	box-shadow: 0 1px 0 rgba(255, 255, 255, 0.2) inset, 0 1px 2px rgba(0, 0, 0, 0.1);
+	color: #333333;
+	border-radius: 2px;
+	display: block;
+	float: left;
+}
+
+.image-popover .image-control .control-row .content a:hover {
+	border: #004898 solid 1px;
+	background-image: -moz-linear-gradient(top, #0082cb, #006baa);
+	background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0082cb), to(#006baa));
+	background-image: -webkit-linear-gradient(top, #0082cb, #006baa);
+	background-image: -o-linear-gradient(top, #0082cb, #006baa);
+	background-image: linear-gradient(to bottom, #0082cb, #006baa);
+	color: #fff;
+}
+
+.image-popover .image-control .control-row .content a.curr {
+	border: #004898 solid 1px;
+	background: #006baa;
+	background-image: -moz-linear-gradient(top, #0082cb, #006baa);
+	background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0082cb), to(#006baa));
+	background-image: -webkit-linear-gradient(top, #0082cb, #006baa);
+	background-image: -o-linear-gradient(top, #0082cb, #006baa);
+	background-image: linear-gradient(to bottom, #0082cb, #006baa);
+	color: #fff;
+}
+
+.image-popover .image-popover-close {
+	padding: 8px 8px;
+	background: #e4e4e4;
+	border: #c4e0ed solid 1px;
+	border-left: none;
+	font-size: 14px;
+	font-family: "宋体";
+	font-weight: bold;
+	color: #017eb5;
+	text-align: center;
+	float: left;
+	cursor: pointer;
+}
+/*弹出窗口*/
+.warning-popover {
+	width: 400px;
+	min-height: 150px;
+	background: #f2dede;
+	border: #eed3d7 solid 1px;
+	position: absolute;
+	left: 50%;
+	top: 50%;
+	margin: -100px 0 0 -200px;
+	text-align: center;
+}
+
+.warning-popover p {
+	font-size: 28px;
+	color: #b94a48;
+	text-align: center;
+	padding: 30px 15px;
+	line-height: 35px;
+}
+
+.warning-popover .text-c {
+	margin: 0px 10px 10px 10px;
+}
+
+.message-popover {
+	width: 400px;
+	min-height: 150px;
+	background: #fff;
+	font-family: "微软雅黑", Fixedsys;
+	border: #5d6d7d solid 1px;
+	position: absolute;
+	left: 50%;
+	top: 50%;
+	margin: -150px 0 0 -200px;
+	text-align: center;
+}
+
+.message-popover .popover-header {
+	width: 100%;
+	height: 46px;
+	background: #5d6d7d;
+	color: #fff;
+}
+
+.message-popover .popover-header .title {
+	font-size: 22px;
+	font-weight: bold;
+	color: #fff;
+	margin: 0px;
+	padding: 13px 0 0 13px;
+	float: left;
+}
+
+.message-popover .popover-header .image-close {
+	margin: 0px;
+	padding: 13px 13px 0 0px;
+	cursor: pointer;
+	float: right;
+}
+
+.message-popover .popover-cont {
+	font-size: 18px;
+	color: #005277;
+	text-align: left;
+	padding: 15px;
+	line-height: 30px;
+	word-wrap: break-word;
+}
+
+.message-popover .text-c {
+	margin: 0px 0 15px 0;
+	width: 100px;
+	text-align: center;
+}
+
+.message-popover2 {
+	width: 400px;
+	font-family: "微软雅黑", Fixedsys;
+	min-height: 150px;
+	background: #fff;
+	border: #ffcc00 solid 1px;
+	position: absolute;
+	left: 50%;
+	top: 50%;
+	margin: -150px 0 0 -200px;
+	text-align: center;
+}
+
+.message-popover2 .popover-header {
+	width: 100%;
+	height: 46px;
+	background: #eabb00;
+	color: #fff;
+}
+
+.message-popover2 .popover-header .title {
+	font-size: 22px;
+	font-weight: bold;
+	color: #000;
+	margin: 0px;
+	padding: 13px 0 0 13px;
+	float: left;
+}
+
+.message-popover2 .popover-header .image-close {
+	margin: 0px;
+	padding: 13px 13px 0 0px;
+	cursor: pointer;
+	float: right;
+}
+
+.message-popover2 .popover-cont {
+	font-size: 18px;
+	color: #fd3435;
+	text-align: center;
+	padding: 15px;
+	line-height: 30px;
+	text-align: left;
+}
+
+.message-popover2 .text-c {
+	margin: 0px 0 15px 0;
+	width: 100px;
+	text-align: center;
+}
+
+.user-input {
+	font-family: "微软雅黑", Fixedsys;
+	width: 94%;
+	height: 25px !important;
+	font-size: 14px;
+	font-weight: bold;
+	border-top: #a5c7c8 solid 1px;
+	border-left: #99b3d3 solid 1px;
+	border-right: #bec9d7 solid 1px;
+	border-bottom: #e2e7ed solid 1px;
+	font-size: 14px;
+	padding: 10px !important;
+	border-radius: 0px;
+	overflow: hidden;
+}
+
+.wrong {
+    font-size: 18px;
+    color: #f00;
+    line-height: 30px;
+}
+.message-popover .popover-cont .username,.password,.password2 {
+    font-size: 12px;
+    color: #f00;
+    line-height: 30px;
+    padding-left: 20px;
+}
+a.button.all-zero-button {
+	margin-right: 20px;
+}
+.message-popover .popover-cont .username-input,.password-input,.password2-input{
+    width: 200px;
+}
+.message-popover .text-userInfo {
+    margin: 0px 0 15px 0;
+    width: 50px;
+    float: right;
+    margin-right: 20px;
+}
+
+.password-input,.password2-input{
+    margin-left: 20px;
+}
+
+.username-input{
+    margin-left: 12px;
+}

+ 21 - 0
stmms-web/src/main/webapp/static/mark-leader/image-popover.html

@@ -0,0 +1,21 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>高校版阅卷系统</title>
+<link href="css/bootstrap.css" rel="stylesheet" type="text/css" />
+<link href="css/style.css" rel="stylesheet" type="text/css" />
+</head>
+
+<body>
+<div class="image-view-popover">
+  <div class="popover-header">
+    <p class="title">原图切换</p>
+    <p class="image-switch"><a href="#">1</a><a href="#">2</a><a class="curr" href="#">3</a><a href="#">4</a></p>
+    <p class="image-control"><a class="curr" href="#">放大</a><a href="#">缩小</a><a href="#">1:1</a><a href="#">全屏</a></p>
+    <p class="image-close"><img src="images/images-close.png" /></p>
+  </div>
+  <div class="popover-content"><img src="images/00001_F.jpg" /></div>
+</div>
+</body>
+</html>

BIN
stmms-web/src/main/webapp/static/mark-leader/images/00001_F.jpg


BIN
stmms-web/src/main/webapp/static/mark-leader/images/background.jpg


BIN
stmms-web/src/main/webapp/static/mark-leader/images/button.png


BIN
stmms-web/src/main/webapp/static/mark-leader/images/close.png


BIN
stmms-web/src/main/webapp/static/mark-leader/images/down.png


BIN
stmms-web/src/main/webapp/static/mark-leader/images/hp-close.png


BIN
stmms-web/src/main/webapp/static/mark-leader/images/images-close.png


BIN
stmms-web/src/main/webapp/static/mark-leader/images/off.png


BIN
stmms-web/src/main/webapp/static/mark-leader/images/on.png


BIN
stmms-web/src/main/webapp/static/mark-leader/images/up.png


BIN
stmms-web/src/main/webapp/static/mark-leader/images/未标题-2.psd


BIN
stmms-web/src/main/webapp/static/mark-leader/img/glyphicons-halflings-white.png


BIN
stmms-web/src/main/webapp/static/mark-leader/img/glyphicons-halflings.png


+ 308 - 0
stmms-web/src/main/webapp/static/mark-leader/index-select.html

@@ -0,0 +1,308 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>高校版阅卷系统</title>
+<link href="css/bootstrap.css" rel="stylesheet" type="text/css" />
+<link href="css/style.css" rel="stylesheet" type="text/css" />
+</head>
+
+<body>
+<div class="container-fluid">
+  <div class="row-fluid">
+    <!--若隐藏左边回评界面,请将Body content里class="span10"改为span12-->
+    <div class="span2 mark-sidebar">
+       <div class="header">
+       <p class="fl">前<i class=" yellow">10</i>份-前<i class=" yellow">20</i>份</p>
+       <a href="#"><img src="images/hp-close.png" /></a>
+       </div>
+       <div class="m-pagination">
+        <a class="active" href="#">上一页</a>
+        <a href="#">下一页</a>
+       </div>
+       <div class="m-pagination">
+        <i>上一页</i>
+        <i>下一页</i>
+       </div>
+       <div class="sublist">
+        <table class="table table-hover">
+              <thead>
+                <tr>
+                  <th>密号</th>
+                  <th>时间</th>
+                  <th>总分</th>
+                </tr>
+              </thead>
+              <tbody>
+                <tr>
+                  <td>021568</td>
+                  <td>09:50</td>
+                  <td>10分</td>
+                </tr>
+                <tr >
+                  <td>021568</td>
+                  <td>09:50</td>
+                  <td>10分</td>
+                </tr>
+                <tr>
+                  <td>021568</td>
+                  <td>09:50</td>
+                  <td>10分</td>
+                </tr>
+                <tr class="act">
+                  <td>021568</td>
+                  <td>09:50</td>
+                  <td>10分</td>
+                </tr>
+                <tr>
+                  <td>021568</td>
+                  <td>09:50</td>
+                  <td>10分</td>
+                </tr>
+                <tr>
+                  <td>021568</td>
+                  <td>09:50</td>
+                  <td>10分</td>
+                </tr>
+                <tr class="active">
+                  <td>021568</td>
+                  <td>09:50</td>
+                  <td>10分</td>
+                </tr>
+                <tr>
+                  <td>021568</td>
+                  <td>09:50</td>
+                  <td>10分</td>
+                </tr>
+                <tr>
+                  <td>021568</td>
+                  <td>09:50</td>
+                  <td>10分</td>
+                </tr>
+                <tr>
+                  <td>021568</td>
+                  <td>09:50</td>
+                  <td>10分</td>
+                </tr>
+                <tr>
+                  <td>021568</td>
+                  <td>09:50</td>
+                  <td>10分</td>
+                </tr>
+              </tbody>
+            </table>
+       </div>
+    </div>
+    <div class="span10 center-content">
+     <!--头部内容区开始-->
+      <div class="row-fluid">
+         <div class="header">
+         <p class="text">
+         <i>正评</i>
+         <i>密号<em>89652</em></i>
+         <i>评卷数<em>0</em></i>
+         </p>
+         <p class="text">
+         <i>试卷总数<em>100</em></i>
+         <i>已评<em>50份</em></i>
+         <i>未评<em>30份</em></i>
+         <i>已评比例<em>20%</em></i>
+         </p>
+         <a href="#" class="btn">隐藏</a>
+         <p class="tips">
+          <em>
+          <a href="#" class="btn"><!--<i class="icon-zoom-in"></i>-->放大</a>
+          <a href="#" class="btn"><!--<i class="icon-zoom-out"></i>-->缩小</a>
+          <a href="#" class="btn"><!--<i class="icon-move"></i>-->拖动</a>
+          <a href="#" class="btn"><!--<i class="icon-zoom-out"></i>-->1:1</a>
+          </em>
+          <em><a href="#" class="btn"><i class="icon-hand-up"></i> <i>小助手</i></a></em>
+          <a class="useinfo" href="#"><i class="icon-user icon-white"></i> <i>中国党中国党</i></a>
+          <a class="logout" href="#"><i class="icon-off icon-white"></i> <i>退出</i></a>
+         </p>
+         </div>
+      </div>
+     <!--头部内容区结束-->
+      <div class="row-fluid">
+       <div class="span10 image-content"><img src="images/00001_F.jpg" /></div>
+       <div class="span2 mark-steps">
+        <!--从这里开始是键盘给分板-->
+           <div class="step-board">
+             <a href="#" class="header"><< 显示分值表</a>
+                 <p><i class="fl mr2-t"><strong>选作:</strong></i>
+                   <select class="span8 mr-t">
+                  <option>未选择</option>
+                  <option>2</option>
+                  <option>3</option>
+                  <option>4</option>
+                  <option>5</option>
+                </select>
+                </p>
+             <div class="sublist"><p class="fraction">总分 <i>50分</i></p><div>
+             
+             <div class="step-list">
+             <div class="done">
+               <div class="number">
+                 <div class="title">第一小题</div>
+                 <div class="num">25.5</div>
+               </div>
+               <div class="score">
+                 <div class="title">间隔2分</div>
+                 <div class="num">0</div>
+                 <div class="icon">▲</div>
+                 <div class="num">60</div>
+               </div>
+             </div>
+             <div class="current">
+               <div class="number">
+                 <div class="title">第一小题</div>
+                 <div class="num">8</div>
+               </div>
+               <div class="score">
+                 <div class="title">间隔2分</div>
+                 <div class="num">0</div>
+                 <div class="icon">▲</div>
+                 <div class="num">60</div>
+               </div>
+             </div>
+             <div class="todo">
+               <div class="number">
+                 <div class="title">第一小题</div>
+                 <div class="num">25</div>
+               </div>
+               <div class="score">
+                 <div class="title">间隔2分</div>
+                 <div class="num">0</div>
+                 <div class="icon">▲</div>
+                 <div class="num">60</div>
+               </div>
+             </div>
+             <div class="todo">
+               <div class="number">
+                 <div class="title">第一小题</div>
+                 <div class="num">25</div>
+               </div>
+               <div class="score">
+                 <div class="title">间隔2分</div>
+                 <div class="num">0</div>
+                 <div class="icon">▲</div>
+                 <div class="num">60</div>
+               </div>
+             </div>
+            </div>
+            
+           </div>
+       </div>
+           </div>
+           <!--键盘给分板到这里结束-->
+       </div>
+      </div>
+      <!--从这里开始是小助手-->
+      <div class="popover bottom assistant show">
+           <div class="arrow"></div>
+           <h3 class="popover-title">评卷功能</h3>
+           <div class="popover-content">
+               <p class="popover-list">
+               <a  href="#">回评</a><a class="curr" href="#">样卷</a><a  href="#">标答</a><a  href="#">全卷</a>
+               </p>      
+           </div>
+           <h3 class="popover-title">问题卷</h3>
+           <div class="popover-content">
+               <p class="popover-list">
+               <a  href="#">试卷模糊</a><a class="curr" href="#">答错位置</a><a  href="#">无法判别</a>
+               </p>      
+           </div>
+           <h3 class="popover-title">个人设置</h3>
+              <div class="popover-content">
+              <span class="popover-list">总分确认</span>
+              <label class="radio mr-t fl">
+                <input type="radio" name="optionsRadios" id="optionsRadios1" value="option1" checked>
+                开启
+              </label>
+              <label class="radio mr-t fl">
+                <input type="radio" name="optionsRadios" id="optionsRadios1" value="option1" checked>
+                关闭
+              </label>
+              </div>
+        </div>
+<!--小助手结束--> 
+    </div>
+  </div>
+</div>
+<!--从这里开始是分值列表-->
+  <div class="score-board score-board-popover">
+    <div class="header">
+    <p class="fl"><i class="fl">选作题:</i><select class="span1  mr-t">
+  <option>未选择</option>
+  <option>2</option>
+  <option>3</option>
+  <option>4</option>
+  <option>5</option>
+</select></p>
+    <a class="header-close" href="#"><i class="header-text">键盘给分 >></i></a>
+<!--    <a class="header-close" href="#"><img src="images/close.png" /> 键盘给分</a></div>
+-->    </div>
+    <div class="content">
+      <div class="sublist">
+        <p class="number">01</p>
+        <p class="fraction">
+         <a href="#">0.0</a><a href="#">0.5</a><a href="#">1.0</a><a href="#">1.5</a><a href="#">2.0</a><a href="#">2.5</a><a href="#">3.0</a>
+        </p>
+      </div>
+      <div class="sublist">
+        <p class="number">02</p>
+        <p class="fraction">
+         <a href="#">0.0</a><a href="#">0.5</a><a href="#">1.0</a><a href="#">1.5</a><a href="#">2.0</a><a href="#">2.5</a><a href="#">3.0</a>
+        </p>
+      </div>
+      <div class="sublist">
+        <p class="number">第三小题填空提</p>
+        <p class="fraction">
+         <a href="#">0.0</a><a href="#">0.5</a><a class="active" href="#">1.0</a><a href="#">1.5</a><a href="#">2.0</a><a href="#">2.5</a><a href="#">0.0</a><a href="#">0.5</a><a href="#">1.0</a><a href="#">1.5</a>
+        </p>
+      </div>
+      <div class="sublist">
+        <p class="number">04</p>
+        <p class="fraction">
+         <a href="#">0.0</a><a href="#">0.5</a><a href="#">1.0</a><a href="#">1.5</a><a href="#">2.0</a><a href="#">2.5</a><a href="#">3.0</a>
+        </p>
+      </div>
+      <div class="sublist">
+        <p class="number">05</p>
+        <p class="fraction">
+         <a href="#">0.0</a><a href="#">0.5</a><a href="#">1.0</a><a href="#">1.5</a><a href="#">2.0</a><a href="#">2.5</a><a href="#">3.0</a>
+        </p>
+      </div>
+      <div class="sublist">
+        <p class="number">06</p>
+        <p class="fraction">
+         <a href="#">0.0</a><a href="#">0.5</a><a href="#">1.0</a><a href="#">1.5</a><a href="#">2.0</a><a href="#">2.5</a><a href="#">3.0</a>
+        </p>
+      </div>
+      <div class="sublist">
+        <p class="number">07</p>
+        <p class="fraction">
+         <a href="#">0.0</a><a href="#">0.5</a><a href="#">1.0</a><a href="#">1.5</a><a href="#">2.0</a><a href="#">2.5</a><a href="#">3.0</a>
+        </p>
+      </div>
+      <div class="sublist">
+        <p class="number">08</p>
+        <p class="fraction">
+         <a href="#">0.0</a><a href="#">0.5</a><a href="#">1.0</a><a href="#">1.5</a><a href="#">2.0</a><a href="#">2.5</a><a href="#">3.0</a>
+        </p>
+      </div>
+      <div class="sublist">
+        <p class="number">10</p>
+        <p class="fraction">
+         <a href="#">0.0</a><a href="#">0.5</a><a href="#">1.0</a><a href="#">1.5</a><a href="#">2.0</a><a href="#">2.5</a><a href="#">3.0</a>
+        </p>
+      </div>
+    </div>
+    <div class="footer">
+      <p class="font">总分:<i class="yellow">50分</i></p>
+      <a class="button" href="">提 交</a>
+    </div>
+  </div>
+<!--分值列表结束-->
+</body>
+</html>

+ 291 - 0
stmms-web/src/main/webapp/static/mark-leader/index.html

@@ -0,0 +1,291 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>高校版阅卷系统</title>
+<link href="css/bootstrap.css" rel="stylesheet" type="text/css" />
+<link href="css/style.css" rel="stylesheet" type="text/css" />
+</head>
+
+<body>
+<div class="container-fluid">
+  <div class="row-fluid">
+    <!--若隐藏左边回评界面,请将Body content里class="span10"改为span12-->
+    <div class="span2 mark-sidebar">
+       <div class="header">
+       <p class="fl">前<i class=" yellow">10</i>份-前<i class=" yellow">20</i>份</p>
+       <a href="#"><img src="images/hp-close.png" /></a>
+       </div>
+       <div class="m-pagination">
+        <a class="active" href="#">上一页</a>
+        <a href="#">下一页</a>
+       </div>
+       <div class="m-pagination">
+        <i>上一页</i>
+        <i>下一页</i>
+       </div>
+       <div class="sublist">
+        <table class="table table-hover">
+              <thead>
+                <tr>
+                  <th>密号</th>
+                  <th>时间</th>
+                  <th>总分</th>
+                </tr>
+              </thead>
+              <tbody>
+                <tr>
+                  <td>021568</td>
+                  <td>09:50</td>
+                  <td>10分</td>
+                </tr>
+                <tr >
+                  <td>021568</td>
+                  <td>09:50</td>
+                  <td>10分</td>
+                </tr>
+                <tr>
+                  <td>021568</td>
+                  <td>09:50</td>
+                  <td>10分</td>
+                </tr>
+                <tr class="act">
+                  <td>021568</td>
+                  <td>09:50</td>
+                  <td>10分</td>
+                </tr>
+                <tr>
+                  <td>021568</td>
+                  <td>09:50</td>
+                  <td>10分</td>
+                </tr>
+                <tr>
+                  <td>021568</td>
+                  <td>09:50</td>
+                  <td>10分</td>
+                </tr>
+                <tr class="active">
+                  <td>021568</td>
+                  <td>09:50</td>
+                  <td>10分</td>
+                </tr>
+                <tr>
+                  <td>021568</td>
+                  <td>09:50</td>
+                  <td>10分</td>
+                </tr>
+                <tr>
+                  <td>021568</td>
+                  <td>09:50</td>
+                  <td>10分</td>
+                </tr>
+                <tr>
+                  <td>021568</td>
+                  <td>09:50</td>
+                  <td>10分</td>
+                </tr>
+                <tr>
+                  <td>021568</td>
+                  <td>09:50</td>
+                  <td>10分</td>
+                </tr>
+              </tbody>
+            </table>
+       </div>
+    </div>
+    <div class="span10 center-content">
+     <!--头部内容区开始-->
+      <div class="row-fluid">
+         <div class="header">
+         <p class="text">
+         <i>正评</i>
+         <i>密号<em>89652</em></i>
+         <i>评卷数<em>0</em></i>
+         </p>
+         <p class="text">
+         <i>试卷总数<em>100</em></i>
+         <i>已评<em>50份</em></i>
+         <i>未评<em>30份</em></i>
+         <i>已评比例<em>20%</em></i>
+         </p>
+         <a href="#" class="btn">隐藏</a>
+         <p class="tips">
+          <em>
+          <a href="#" class="btn"><i class="icon-zoom-in"></i> 放大</a>
+          <a href="#" class="btn"><i class="icon-zoom-out"></i> 缩小</a>
+          <a href="#" class="btn"><i class="icon-move"></i> 拖动</a>
+          <a href="#" class="btn"><i class="icon-zoom-out"></i> 1:1</a>
+          </em>
+          <em><a href="#" class="btn"><i class="icon-hand-up"></i> <i>小助手</i></a></em>
+          <a class="useinfo" href="#"><i class="icon-user icon-white"></i> <i>中国党中国党</i></a>
+          <a class="logout" href="#"><i class="icon-off icon-white"></i> <i>退出</i></a>
+         </p>
+         </div>
+      </div>
+     <!--头部内容区结束-->
+      <div class="row-fluid">
+       <div class="span10 image-content"><img src="images/00001_F.jpg" /></div>
+       <div class="span2 mark-steps">
+        <!--从这里开始是键盘给分板-->
+           <div class="step-board">
+             <a href="#" class="header"><< 显示分值表</a>
+             <div class="sublist"><p class="fraction">总分 <i>50分</i></p><div>
+             
+             <div class="step-list">
+             <div class="done">
+               <div class="number">
+                 <div class="title">第一小题</div>
+                 <div class="num">25.5</div>
+               </div>
+               <div class="score">
+                 <div class="title">间隔2分</div>
+                 <div class="num">0</div>
+                 <div class="icon">▲</div>
+                 <div class="num">60</div>
+               </div>
+             </div>
+             <div class="current">
+               <div class="number">
+                 <div class="title">第一小题</div>
+                 <div class="num">8</div>
+               </div>
+               <div class="score">
+                 <div class="title">间隔2分</div>
+                 <div class="num">0</div>
+                 <div class="icon">▲</div>
+                 <div class="num">60</div>
+               </div>
+             </div>
+             <div class="todo">
+               <div class="number">
+                 <div class="title">第一小题</div>
+                 <div class="num">25</div>
+               </div>
+               <div class="score">
+                 <div class="title">间隔2分</div>
+                 <div class="num">0</div>
+                 <div class="icon">▲</div>
+                 <div class="num">60</div>
+               </div>
+             </div>
+             <div class="todo">
+               <div class="number">
+                 <div class="title">第一小题</div>
+                 <div class="num">25</div>
+               </div>
+               <div class="score">
+                 <div class="title">间隔2分</div>
+                 <div class="num">0</div>
+                 <div class="icon">▲</div>
+                 <div class="num">60</div>
+               </div>
+             </div>
+            </div>
+            
+           </div>
+       </div>
+           </div>
+           <!--键盘给分板到这里结束-->
+       </div>
+      </div>
+      <!--从这里开始是小助手-->
+      <div class="popover bottom assistant show">
+           <div class="arrow"></div>
+           <h3 class="popover-title">评卷功能</h3>
+           <div class="popover-content">
+               <p class="popover-list">
+               <a  href="#">回评</a><a class="curr" href="#">样卷</a><a  href="#">标答</a><a  href="#">全卷</a>
+               </p>      
+           </div>
+           <h3 class="popover-title">问题卷</h3>
+           <div class="popover-content">
+               <p class="popover-list">
+               <a  href="#">试卷模糊</a><a class="curr" href="#">答错位置</a><a  href="#">无法判别</a>
+               </p>      
+           </div>
+           <h3 class="popover-title">个人设置</h3>
+              <div class="popover-content">
+              <span class="popover-list">总分确认</span>
+              <label class="radio mr-t fl">
+                <input type="radio" name="optionsRadios" id="optionsRadios1" value="option1" checked>
+                开启
+              </label>
+              <label class="radio mr-t fl">
+                <input type="radio" name="optionsRadios" id="optionsRadios1" value="option1" checked>
+                关闭
+              </label>
+              </div>
+        </div>
+<!--小助手结束--> 
+    </div>
+  </div>
+</div>
+<!--从这里开始是分值列表-->
+  <div class="score-board score-board-popover">
+    <div class="header">
+    <p class="fl">书面表达(完成句子)第五大题目</p>
+    <a class="header-close" href="#"><img src="images/close.png" /></a></div>
+    <div class="content">
+      <div class="sublist">
+        <p class="number">01</p>
+        <p class="fraction">
+         <a href="#">0.0</a><a href="#">0.5</a><a href="#">1.0</a><a href="#">1.5</a><a href="#">2.0</a><a href="#">2.5</a><a href="#">3.0</a>
+        </p>
+      </div>
+      <div class="sublist">
+        <p class="number">02</p>
+        <p class="fraction">
+         <a href="#">0.0</a><a href="#">0.5</a><a href="#">1.0</a><a href="#">1.5</a><a href="#">2.0</a><a href="#">2.5</a><a href="#">3.0</a>
+        </p>
+      </div>
+      <div class="sublist">
+        <p class="number">第三小题填空提</p>
+        <p class="fraction">
+         <a href="#">0.0</a><a href="#">0.5</a><a class="active" href="#">1.0</a><a href="#">1.5</a><a href="#">2.0</a><a href="#">2.5</a><a href="#">0.0</a><a href="#">0.5</a><a href="#">1.0</a><a href="#">1.5</a>
+        </p>
+      </div>
+      <div class="sublist">
+        <p class="number">04</p>
+        <p class="fraction">
+         <a href="#">0.0</a><a href="#">0.5</a><a href="#">1.0</a><a href="#">1.5</a><a href="#">2.0</a><a href="#">2.5</a><a href="#">3.0</a>
+        </p>
+      </div>
+      <div class="sublist">
+        <p class="number">05</p>
+        <p class="fraction">
+         <a href="#">0.0</a><a href="#">0.5</a><a href="#">1.0</a><a href="#">1.5</a><a href="#">2.0</a><a href="#">2.5</a><a href="#">3.0</a>
+        </p>
+      </div>
+      <div class="sublist">
+        <p class="number">06</p>
+        <p class="fraction">
+         <a href="#">0.0</a><a href="#">0.5</a><a href="#">1.0</a><a href="#">1.5</a><a href="#">2.0</a><a href="#">2.5</a><a href="#">3.0</a>
+        </p>
+      </div>
+      <div class="sublist">
+        <p class="number">07</p>
+        <p class="fraction">
+         <a href="#">0.0</a><a href="#">0.5</a><a href="#">1.0</a><a href="#">1.5</a><a href="#">2.0</a><a href="#">2.5</a><a href="#">3.0</a>
+        </p>
+      </div>
+      <div class="sublist">
+        <p class="number">08</p>
+        <p class="fraction">
+         <a href="#">0.0</a><a href="#">0.5</a><a href="#">1.0</a><a href="#">1.5</a><a href="#">2.0</a><a href="#">2.5</a><a href="#">3.0</a>
+        </p>
+      </div>
+      <div class="sublist">
+        <p class="number">10</p>
+        <p class="fraction">
+         <a href="#">0.0</a><a href="#">0.5</a><a href="#">1.0</a><a href="#">1.5</a><a href="#">2.0</a><a href="#">2.5</a><a href="#">3.0</a>
+        </p>
+      </div>
+    </div>
+    <div class="footer">
+      <p class="font">总分:<i class="yellow">50分</i></p>
+      <a class="button" href="">提 交</a>
+    </div>
+  </div>
+<!--分值列表结束-->
+</body>
+</html>

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 4 - 0
stmms-web/src/main/webapp/static/mark-leader/js/jquery-ui.min.js


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 3 - 0
stmms-web/src/main/webapp/static/mark-leader/js/jquery.min.js


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
stmms-web/src/main/webapp/static/mark-leader/js/jquery.min.map


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 7 - 0
stmms-web/src/main/webapp/static/mark-leader/js/jquery.mousewheel.min.js


+ 482 - 0
stmms-web/src/main/webapp/static/mark-leader/js/json2.js

@@ -0,0 +1,482 @@
+/*
+    http://www.JSON.org/json2.js
+    2010-03-20
+
+    Public Domain.
+
+    NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
+
+    See http://www.JSON.org/js.html
+
+
+    This code should be minified before deployment.
+    See http://javascript.crockford.com/jsmin.html
+
+    USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
+    NOT CONTROL.
+
+
+    This file creates a global JSON object containing two methods: stringify
+    and parse.
+
+        JSON.stringify(value, replacer, space)
+            value       any JavaScript value, usually an object or array.
+
+            replacer    an optional parameter that determines how object
+                        values are stringified for objects. It can be a
+                        function or an array of strings.
+
+            space       an optional parameter that specifies the indentation
+                        of nested structures. If it is omitted, the text will
+                        be packed without extra whitespace. If it is a number,
+                        it will specify the number of spaces to indent at each
+                        level. If it is a string (such as '\t' or '&nbsp;'),
+                        it contains the characters used to indent at each level.
+
+            This method produces a JSON text from a JavaScript value.
+
+            When an object value is found, if the object contains a toJSON
+            method, its toJSON method will be called and the result will be
+            stringified. A toJSON method does not serialize: it returns the
+            value represented by the name/value pair that should be serialized,
+            or undefined if nothing should be serialized. The toJSON method
+            will be passed the key associated with the value, and this will be
+            bound to the value
+
+            For example, this would serialize Dates as ISO strings.
+
+                Date.prototype.toJSON = function (key) {
+                    function f(n) {
+                        // Format integers to have at least two digits.
+                        return n < 10 ? '0' + n : n;
+                    }
+
+                    return this.getUTCFullYear()   + '-' +
+                         f(this.getUTCMonth() + 1) + '-' +
+                         f(this.getUTCDate())      + 'T' +
+                         f(this.getUTCHours())     + ':' +
+                         f(this.getUTCMinutes())   + ':' +
+                         f(this.getUTCSeconds())   + 'Z';
+                };
+
+            You can provide an optional replacer method. It will be passed the
+            key and value of each member, with this bound to the containing
+            object. The value that is returned from your method will be
+            serialized. If your method returns undefined, then the member will
+            be excluded from the serialization.
+
+            If the replacer parameter is an array of strings, then it will be
+            used to select the members to be serialized. It filters the results
+            such that only members with keys listed in the replacer array are
+            stringified.
+
+            Values that do not have JSON representations, such as undefined or
+            functions, will not be serialized. Such values in objects will be
+            dropped; in arrays they will be replaced with null. You can use
+            a replacer function to replace those with JSON values.
+            JSON.stringify(undefined) returns undefined.
+
+            The optional space parameter produces a stringification of the
+            value that is filled with line breaks and indentation to make it
+            easier to read.
+
+            If the space parameter is a non-empty string, then that string will
+            be used for indentation. If the space parameter is a number, then
+            the indentation will be that many spaces.
+
+            Example:
+
+            text = JSON.stringify(['e', {pluribus: 'unum'}]);
+            // text is '["e",{"pluribus":"unum"}]'
+
+
+            text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t');
+            // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'
+
+            text = JSON.stringify([new Date()], function (key, value) {
+                return this[key] instanceof Date ?
+                    'Date(' + this[key] + ')' : value;
+            });
+            // text is '["Date(---current time---)"]'
+
+
+        JSON.parse(text, reviver)
+            This method parses a JSON text to produce an object or array.
+            It can throw a SyntaxError exception.
+
+            The optional reviver parameter is a function that can filter and
+            transform the results. It receives each of the keys and values,
+            and its return value is used instead of the original value.
+            If it returns what it received, then the structure is not modified.
+            If it returns undefined then the member is deleted.
+
+            Example:
+
+            // Parse the text. Values that look like ISO date strings will
+            // be converted to Date objects.
+
+            myData = JSON.parse(text, function (key, value) {
+                var a;
+                if (typeof value === 'string') {
+                    a =
+/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
+                    if (a) {
+                        return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
+                            +a[5], +a[6]));
+                    }
+                }
+                return value;
+            });
+
+            myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) {
+                var d;
+                if (typeof value === 'string' &&
+                        value.slice(0, 5) === 'Date(' &&
+                        value.slice(-1) === ')') {
+                    d = new Date(value.slice(5, -1));
+                    if (d) {
+                        return d;
+                    }
+                }
+                return value;
+            });
+
+
+    This is a reference implementation. You are free to copy, modify, or
+    redistribute.
+*/
+
+/*jslint evil: true, strict: false */
+
+/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply,
+    call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
+    getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,
+    lastIndex, length, parse, prototype, push, replace, slice, stringify,
+    test, toJSON, toString, valueOf
+*/
+
+
+// Create a JSON object only if one does not already exist. We create the
+// methods in a closure to avoid creating global variables.
+
+if (!this.JSON) {
+    this.JSON = {};
+}
+
+(function () {
+
+    function f(n) {
+        // Format integers to have at least two digits.
+        return n < 10 ? '0' + n : n;
+    }
+
+    if (typeof Date.prototype.toJSON !== 'function') {
+
+        Date.prototype.toJSON = function (key) {
+
+            return isFinite(this.valueOf()) ?
+                   this.getUTCFullYear()   + '-' +
+                 f(this.getUTCMonth() + 1) + '-' +
+                 f(this.getUTCDate())      + 'T' +
+                 f(this.getUTCHours())     + ':' +
+                 f(this.getUTCMinutes())   + ':' +
+                 f(this.getUTCSeconds())   + 'Z' : null;
+        };
+
+        String.prototype.toJSON =
+        Number.prototype.toJSON =
+        Boolean.prototype.toJSON = function (key) {
+            return this.valueOf();
+        };
+    }
+
+    var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
+        escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
+        gap,
+        indent,
+        meta = {    // table of character substitutions
+            '\b': '\\b',
+            '\t': '\\t',
+            '\n': '\\n',
+            '\f': '\\f',
+            '\r': '\\r',
+            '"' : '\\"',
+            '\\': '\\\\'
+        },
+        rep;
+
+
+    function quote(string) {
+
+// If the string contains no control characters, no quote characters, and no
+// backslash characters, then we can safely slap some quotes around it.
+// Otherwise we must also replace the offending characters with safe escape
+// sequences.
+
+        escapable.lastIndex = 0;
+        return escapable.test(string) ?
+            '"' + string.replace(escapable, function (a) {
+                var c = meta[a];
+                return typeof c === 'string' ? c :
+                    '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
+            }) + '"' :
+            '"' + string + '"';
+    }
+
+
+    function str(key, holder) {
+
+// Produce a string from holder[key].
+
+        var i,          // The loop counter.
+            k,          // The member key.
+            v,          // The member value.
+            length,
+            mind = gap,
+            partial,
+            value = holder[key];
+
+// If the value has a toJSON method, call it to obtain a replacement value.
+
+        if (value && typeof value === 'object' &&
+                typeof value.toJSON === 'function') {
+            value = value.toJSON(key);
+        }
+
+// If we were called with a replacer function, then call the replacer to
+// obtain a replacement value.
+
+        if (typeof rep === 'function') {
+            value = rep.call(holder, key, value);
+        }
+
+// What happens next depends on the value's type.
+
+        switch (typeof value) {
+        case 'string':
+            return quote(value);
+
+        case 'number':
+
+// JSON numbers must be finite. Encode non-finite numbers as null.
+
+            return isFinite(value) ? String(value) : 'null';
+
+        case 'boolean':
+        case 'null':
+
+// If the value is a boolean or null, convert it to a string. Note:
+// typeof null does not produce 'null'. The case is included here in
+// the remote chance that this gets fixed someday.
+
+            return String(value);
+
+// If the type is 'object', we might be dealing with an object or an array or
+// null.
+
+        case 'object':
+
+// Due to a specification blunder in ECMAScript, typeof null is 'object',
+// so watch out for that case.
+
+            if (!value) {
+                return 'null';
+            }
+
+// Make an array to hold the partial results of stringifying this object value.
+
+            gap += indent;
+            partial = [];
+
+// Is the value an array?
+
+            if (Object.prototype.toString.apply(value) === '[object Array]') {
+
+// The value is an array. Stringify every element. Use null as a placeholder
+// for non-JSON values.
+
+                length = value.length;
+                for (i = 0; i < length; i += 1) {
+                    partial[i] = str(i, value) || 'null';
+                }
+
+// Join all of the elements together, separated with commas, and wrap them in
+// brackets.
+
+                v = partial.length === 0 ? '[]' :
+                    gap ? '[\n' + gap +
+                            partial.join(',\n' + gap) + '\n' +
+                                mind + ']' :
+                          '[' + partial.join(',') + ']';
+                gap = mind;
+                return v;
+            }
+
+// If the replacer is an array, use it to select the members to be stringified.
+
+            if (rep && typeof rep === 'object') {
+                length = rep.length;
+                for (i = 0; i < length; i += 1) {
+                    k = rep[i];
+                    if (typeof k === 'string') {
+                        v = str(k, value);
+                        if (v) {
+                            partial.push(quote(k) + (gap ? ': ' : ':') + v);
+                        }
+                    }
+                }
+            } else {
+
+// Otherwise, iterate through all of the keys in the object.
+
+                for (k in value) {
+                    if (Object.hasOwnProperty.call(value, k)) {
+                        v = str(k, value);
+                        if (v) {
+                            partial.push(quote(k) + (gap ? ': ' : ':') + v);
+                        }
+                    }
+                }
+            }
+
+// Join all of the member texts together, separated with commas,
+// and wrap them in braces.
+
+            v = partial.length === 0 ? '{}' :
+                gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' +
+                        mind + '}' : '{' + partial.join(',') + '}';
+            gap = mind;
+            return v;
+        }
+    }
+
+// If the JSON object does not yet have a stringify method, give it one.
+
+    if (typeof JSON.stringify !== 'function') {
+        JSON.stringify = function (value, replacer, space) {
+
+// The stringify method takes a value and an optional replacer, and an optional
+// space parameter, and returns a JSON text. The replacer can be a function
+// that can replace values, or an array of strings that will select the keys.
+// A default replacer method can be provided. Use of the space parameter can
+// produce text that is more easily readable.
+
+            var i;
+            gap = '';
+            indent = '';
+
+// If the space parameter is a number, make an indent string containing that
+// many spaces.
+
+            if (typeof space === 'number') {
+                for (i = 0; i < space; i += 1) {
+                    indent += ' ';
+                }
+
+// If the space parameter is a string, it will be used as the indent string.
+
+            } else if (typeof space === 'string') {
+                indent = space;
+            }
+
+// If there is a replacer, it must be a function or an array.
+// Otherwise, throw an error.
+
+            rep = replacer;
+            if (replacer && typeof replacer !== 'function' &&
+                    (typeof replacer !== 'object' ||
+                     typeof replacer.length !== 'number')) {
+                throw new Error('JSON.stringify');
+            }
+
+// Make a fake root object containing our value under the key of ''.
+// Return the result of stringifying the value.
+
+            return str('', {'': value});
+        };
+    }
+
+
+// If the JSON object does not yet have a parse method, give it one.
+
+    if (typeof JSON.parse !== 'function') {
+        JSON.parse = function (text, reviver) {
+
+// The parse method takes a text and an optional reviver function, and returns
+// a JavaScript value if the text is a valid JSON text.
+
+            var j;
+
+            function walk(holder, key) {
+
+// The walk method is used to recursively walk the resulting structure so
+// that modifications can be made.
+
+                var k, v, value = holder[key];
+                if (value && typeof value === 'object') {
+                    for (k in value) {
+                        if (Object.hasOwnProperty.call(value, k)) {
+                            v = walk(value, k);
+                            if (v !== undefined) {
+                                value[k] = v;
+                            } else {
+                                delete value[k];
+                            }
+                        }
+                    }
+                }
+                return reviver.call(holder, key, value);
+            }
+
+
+// Parsing happens in four stages. In the first stage, we replace certain
+// Unicode characters with escape sequences. JavaScript handles many characters
+// incorrectly, either silently deleting them, or treating them as line endings.
+
+            text = String(text);
+            cx.lastIndex = 0;
+            if (cx.test(text)) {
+                text = text.replace(cx, function (a) {
+                    return '\\u' +
+                        ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
+                });
+            }
+
+// In the second stage, we run the text against regular expressions that look
+// for non-JSON patterns. We are especially concerned with '()' and 'new'
+// because they can cause invocation, and '=' because it can cause mutation.
+// But just to be safe, we want to reject all unexpected forms.
+
+// We split the second stage into 4 regexp operations in order to work around
+// crippling inefficiencies in IE's and Safari's regexp engines. First we
+// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
+// replace all simple value tokens with ']' characters. Third, we delete all
+// open brackets that follow a colon or comma or that begin the text. Finally,
+// we look to see that the remaining characters are only whitespace or ']' or
+// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.
+
+            if (/^[\],:{}\s]*$/.
+test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').
+replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
+replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
+
+// In the third stage we use the eval function to compile the text into a
+// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
+// in JavaScript: it can begin a block or an object literal. We wrap the text
+// in parens to eliminate the ambiguity.
+
+                j = eval('(' + text + ')');
+
+// In the optional fourth stage, we recursively walk the new structure, passing
+// each name/value pair to a reviver function for possible transformation.
+
+                return typeof reviver === 'function' ?
+                    walk({'': j}, '') : j;
+            }
+
+// If the text is not JSON parseable, then a SyntaxError is thrown.
+
+            throw new SyntaxError('JSON.parse');
+        };
+    }
+}());

+ 604 - 0
stmms-web/src/main/webapp/static/mark-leader/js/mark-control.js

@@ -0,0 +1,604 @@
+function MarkControl(option) {
+    this.option = option;
+
+    this.maxPrefetchCount = parseInt(option.prefetchCount);
+    this.maxPrefetchCount = this.maxPrefetchCount != undefined && this.maxPrefetchCount > 1 ? this.maxPrefetchCount : 1;
+
+    this.container = option.container;
+    this.context = {
+        imageServer: option.imageServer,
+        staticServer: option.staticServer,
+        isFinish: false,
+        prefetching: false,
+        prefetchTask: []
+    };
+    //初始化容器结构
+    this.initContainer();
+    //初始化事件监听
+    this.initTriggers(option);
+    //初始化功能模块
+    this.initModules(option);
+    //初始化成功回调方法
+    //console.log('MarkControl init success!');
+    //if (option.success != undefined && typeof(option.success) == 'function') {
+    //    option.success();
+    //}
+}
+
+MarkControl.prototype.initContainer = function() {
+    var height = this.option.height;
+    if (height == undefined) {
+        height = $(window).height();
+    }
+    this.container = getDom(this.main_row_dom, this).appendTo(this.container);
+
+    if (this.option.enableSidear != false) {
+        this.container.sidebar = getDom(this.sidebar_dom, this).appendTo(this.container);
+        this.container.sidebar.css('max-height', height);
+    }
+    this.container.center = getDom(this.center_dom, this).appendTo(this.container);
+    this.container.header = getDom(this.center_header_dom, this).appendTo(this.container.center).find('.header');
+    this.container.centerContent = getDom(this.center_content_dom, this).appendTo(this.container.center);
+    this.container.imageContent = getDom(this.image_content_dom, this).appendTo(this.container.centerContent);
+
+    this.container.height(height);
+    this.container.centerContent.css('height', height - this.container.header.parent().height());
+
+    this.initHeaderAndAssistant();
+}
+
+MarkControl.prototype.initHeaderAndAssistant = function() {
+    var self = this;
+    this.container.header.find('#mark-user-name').html(this.option.userName);
+    if (this.option.logoutTitle != undefined) {
+        this.container.header.find('#logout-title').html(this.option.logoutTitle);
+    }
+    this.container.header.find('#logout-link').click(function() {
+        self.trigger('logout.link.click');
+        return true;
+    })
+
+    this.container.assistant = getDom(this.assistant_dom, this).appendTo(this.container);
+    this.container.assistant.positionSet = false;
+    this.container.assistantButton = this.container.header.find('#assistant-button');
+
+    this.container.assistantButton.click(this, function(event) {
+        if (self.container.assistant.positionSet == false) {
+            self.container.assistant.offset({
+                top: self.container.assistantButton.position().top + self.container.assistantButton.height() + 5,
+                left: self.container.assistantButton.position().left - 85
+            });
+            self.container.assistant.positionSet = true;
+        }
+        self.container.assistant.toggle();
+    });
+
+}
+
+MarkControl.prototype.initMarkFunction = function() {
+    var functionList = this.container.assistant.functionList;
+    if (functionList == undefined) {
+        functionList = getDom(this.mark_function_dom, this).appendTo(this.container.assistant).find('#function-list');
+        this.container.assistant.functionList = functionList;
+    }
+}
+
+//增加某个事件的监听方法
+MarkControl.prototype.on = function(eventName, caller, callback, async) {
+    if (eventName && callback && eventName.length > 0 && typeof(callback) == 'function') {
+        if (async) {
+            this.container.bind(eventName, callback);
+        } else {
+            if (this.triggers[eventName] == undefined) {
+                this.triggers[eventName] = new Array();
+            }
+            this.triggers[eventName].push({
+                caller: caller,
+                callback: callback
+            });
+        }
+    }
+}
+
+//触发某个事件,并传递事件相关内容
+MarkControl.prototype.trigger = function(eventName, eventObject) {
+    var result = true;
+    if (eventName && eventName.length > 0) {
+        var array = this.triggers[eventName];
+        if (array != undefined && array.length > 0) {
+            var event = {
+                name: eventName
+            }
+            for (var i in array) {
+                result = result & array[i].callback.call(array[i].caller, event, this.context, eventObject);
+            }
+        }
+        this.container.trigger(eventName, this.context, eventObject);
+    }
+    return result;
+}
+
+//初始化事件监听
+MarkControl.prototype.initTriggers = function(option) {
+    if (this.triggers == undefined) {
+        this.triggers = {};
+    }
+    if (option != undefined && option.on != undefined) {
+        for (var name in option.on) {
+            this.on(name, option.on[name]);
+        }
+    }
+
+    var self = this;
+    this.on('view.sidebar.open', this, function(event, context, eventObject) {
+        this.container.assistant.hide();
+        if (this.container.center.hasClass('span12')) {
+            this.container.center.removeClass('span12');
+            this.container.center.addClass('span7');
+        } else if (this.container.center.hasClass('span10')) {
+            this.container.center.removeClass('span10');
+            this.container.center.addClass('span5');
+        }
+        this.trigger('center.width.change');
+    });
+    this.on('view.sidebar.close', this, function(event, context, eventObject) {
+        this.container.assistant.hide();
+        if (this.container.center.hasClass('span7')) {
+            this.container.center.removeClass('span7');
+            this.container.center.addClass('span12');
+        } else if (this.container.center.hasClass('span5')) {
+            this.container.center.removeClass('span5');
+            this.container.center.addClass('span10');
+        }
+        this.trigger('center.width.change');
+    });
+    this.on('mark.sidebar.open', this, function(event, context, eventObject) {
+        this.container.assistant.hide();
+        if (this.container.center.hasClass('span12')) {
+            this.container.center.removeClass('span12');
+            this.container.center.addClass('span10');
+        } else if (this.container.center.hasClass('span7')) {
+            this.container.center.removeClass('span7');
+            this.container.center.addClass('span5');
+        }
+        this.trigger('center.width.change');
+    });
+    this.on('mark.sidebar.close', this, function(event, context, eventObject) {
+        this.container.assistant.hide();
+        if (this.container.center.hasClass('span10')) {
+            this.container.center.removeClass('span10');
+            this.container.center.addClass('span12');
+        } else if (this.container.center.hasClass('span5')) {
+            this.container.center.removeClass('span5');
+            this.container.center.addClass('span7');
+        }
+        this.trigger('center.width.change');
+    });
+    this.on('task.get.finish', this, function(event, context, eventObject) {
+        context.prefetchCallback = undefined;
+    });
+    this.on('task.get.none', this, function(event, context, eventObject) {
+        self.getStatus();
+        if (context.task == undefined && self.option.clearUrl != undefined) {
+            $.post(self.option.clearUrl, {}, function() {});
+        }
+        context.prefetchCallback = function() {
+            context.prefetchCallback = undefined;
+            if (self.context.task == undefined && self.context.prefetchTask.length > 0) {
+                self.getTask();
+            }
+        }
+    });
+    this.on('task.prefetch.success', this, function(event, context, eventObject) {
+        if (context.prefetchCallback != undefined) {
+            context.prefetchCallback();
+        }
+        setTimeout(function() {
+            self.prefetch();
+        }, 500);
+    });
+    this.on('task.prefetch.error', this, function(event, context, eventObject) {
+        setTimeout(function() {
+            self.prefetch();
+        }, 500);
+    });
+    this.on('task.prefetch.none', this, function(event, context, eventObject) {
+        if (context.prefetchCallback != undefined) {
+            context.prefetchCallback();
+        }
+        if (context.isFinish != true) {
+            setTimeout(function() {
+                self.prefetch();
+            }, 1000);
+        }
+    });
+    this.on('task.prefetch.finish', this, function(event, context, eventObject) {
+        self.getTask();
+    });
+    this.on('task.submit.before', this, function(event, context, eventObject) {
+        context.submitting = true;
+    });
+    this.on('task.submit.success', this, function(event, context, eventObject) {
+        context.submitting = false;
+        context.task = undefined;
+        self.getTask();
+    });
+    this.on('task.submit.error', this, function(event, context, eventObject) {
+        context.submitting = false;
+    });
+    this.on('task.pass.success', this, function(event, context, eventObject) {
+        if (context.task != undefined && self.option.clearUrl != undefined) {
+            $.post(self.option.clearUrl, {
+                libraryId: context.task.libraryId
+            });
+        }
+        context.task = undefined;
+        self.getTask();
+    });
+
+    $(document).keypress(this, function(event) {
+        if (self.context.listenKeyboard != false) {
+            return self.trigger('key.press', event);
+        }
+    });
+    $(document).keydown(this, function(event) {
+        if (self.context.listenKeyboard != false) {
+            return self.trigger('key.down', event);
+        }
+    });
+    $(document).keyup(this, function(event) {
+        if (self.context.listenKeyboard != false) {
+            return self.trigger('key.up', event);
+        }
+    });
+
+    window.onbeforeunload = function(e) {
+        if (self.option.clearUrl != undefined) {
+            $.post(self.option.clearUrl);
+        }
+    }
+}
+
+//初始化功能模块
+MarkControl.prototype.initModules = function(option) {
+    if (this.modules == undefined) {
+        this.modules = {};
+    }
+    var names = [];
+    var options = [];
+    for (var name in this.defaultModules) {
+        names.push(name);
+        options[name] = this.defaultModules[name];
+    }
+
+    if (option.modules != undefined) {
+        for (var name in option.modules) {
+            if (options[name] == undefined) {
+                names.push(name);
+                options[name] = {};
+            }
+            $.extend(options[name], option.modules[name]);
+        }
+    }
+
+    this.initModule(names, options, this.option.success);
+    //initModule(this, names, 0, options);
+}
+
+//指定初始化某个名称的模块
+MarkControl.prototype.initModule = function(names, options, success) {
+    for (var i in names) {
+        var name = names[i];
+        var option = options[name];
+        var moduleInit = name.replace(/-/g, '_');
+        if (option == undefined || typeof(option) != 'object') {
+            option = {};
+        }
+        option.markControl = this;
+        eval('this.modules[name]=' + moduleInit + '(option, function(){})');
+    }
+    if (success != undefined && typeof(success) == 'function') {
+        success();
+    }
+}
+
+function initModuleAsync(markControl, names, index, option) {
+    if (index < names.length) {
+        var name = names[index];
+        var moduleOption = option[name];
+        var moduleUrl = 'modules/' + name + '.js';
+        var moduleInit = name.replace(/-/g, '_');
+        var modules = markControl.modules;
+        if (modules[name] == undefined) {
+            if (typeof(moduleOption) != 'object') {
+                moduleOption = {};
+            }
+            moduleOption.markControl = markControl;
+            $.getScript(moduleUrl, function() {
+                var success = function() {
+                    initModule(markControl, names, index + 1, option);
+                }
+                eval('modules[name]=' + moduleInit + '(moduleOption, success)');
+            });
+        } else {
+            initModule(markControl, names, index + 1, option);
+        }
+    } else {
+        if (markControl.option.success != undefined && typeof(markControl.option.success) == 'function') {
+            markControl.option.success();
+        }
+    }
+}
+
+MarkControl.prototype.start = function(taskOption) {
+    taskOption.markControl = this;
+    var markControl = this;
+    taskOption.success = function() {
+        markControl.context.prefetchCallback = function() {
+            markControl.context.prefetchCallback = undefined;
+            markControl.getTask();
+        }
+        markControl.context.statusCallback = function() {
+            markControl.context.statusCallback = undefined;
+            markControl.prefetch();
+        }
+        markControl.getStatus();
+    };
+    taskOption.error = function(message) {
+        alert('初始化失败,请刷新页面重新加载');
+    };
+    this.taskControl = new TaskControl(taskOption);
+    this.taskControl.init();
+}
+
+//task预加载
+MarkControl.prototype.prefetch = function() {
+    var taskControl = this.taskControl;
+    var markControl = this;
+    var context = this.context;
+    var imageBuilder = this.modules['image-builder'];
+
+    if (context.isFinish != true) {
+        if (taskControl.isFinish()) {
+            context.isFinish = true;
+        } else if (context.prefetchTask.length >= markControl.maxPrefetchCount) {
+            markControl.trigger('task.prefetch.success');
+        } else if (context.prefetching == false) {
+            context.prefetching = true;
+            markControl.trigger('task.prefetch.before');
+
+            taskControl.fetch(function(task) {
+                if (imageBuilder != undefined) {
+                    imageBuilder.build(task, function(error) {
+                        if (error) {
+                            context.prefetching = false;
+                            markControl.trigger('task.prefetch.error');
+                        } else {
+                            context.prefetchTask.push(task);
+                            context.prefetchStatus = undefined;
+                            context.prefetching = false;
+                            markControl.trigger('task.prefetch.success');
+                        }
+                    });
+                } else {
+                    context.prefetchTask.push(task);
+                    context.prefetchStatus = undefined;
+                    context.prefetching = false;
+                    markControl.trigger('task.prefetch.success');
+                }
+            }, function(task) {
+                context.prefetchStatus = task.message;
+                context.prefetching = false;
+                markControl.trigger('task.prefetch.none');
+            }, function() {
+                context.prefetching = false;
+                markControl.trigger('task.prefetch.none');
+            });
+        }
+    } else {
+        markControl.trigger('task.prefetch.finish');
+    }
+}
+
+MarkControl.prototype.getStatus = function() {
+    if (this.taskControl == undefined) {
+        return;
+    }
+    var self = this;
+    this.taskControl.status(function(status) {
+        self.context.status = status;
+        if (status != undefined) {
+            self.context.isFinish = status.blockTotalCount > 0 && status.blockTotalCount == (status.blockMarkedCount + status.blockExceptionCount);
+        }
+        if (self.context.statusCallback != undefined) {
+            self.context.statusCallback();
+        }
+        self.trigger('mark.status.change', status);
+    })
+}
+
+MarkControl.prototype.getTask = function() {
+    if (this.taskControl == undefined) {
+        return;
+    }
+    var markControl = this;
+    var context = this.context;
+    markControl.trigger('task.get.before');
+
+    if (context.isFinish == true) {
+        markControl.trigger('task.get.finish');
+        return;
+    } else if (context.task != undefined) {
+        markControl.trigger('task.get.success');
+        return;
+    } else if (context.waitTask != undefined) {
+        //优先选择因回评等操作处于等待状态的任务
+        context.task = context.waitTask;
+        context.waitTask = undefined;
+        markControl.trigger('task.get.success');
+    } else if (context.prefetchTask.length > 0) {
+        //判断是否有任务已预加载完毕
+        context.task = context.prefetchTask.shift();
+        markControl.trigger('task.get.success');
+    } else if (context.prefetchStatus != undefined) {
+        //判断是否有在无预加载任务的情况下的消息提示
+        markControl.trigger('task.get.none', context.prefetchStatus);
+    } else {
+        markControl.trigger('task.get.none');
+    }
+}
+
+MarkControl.prototype.getHistory = function(data) {
+    if (this.taskControl == undefined) {
+        return;
+    }
+    this.taskControl.history(data, function(result) {
+        data.result = result;
+        this.option.markControl.trigger('history.get.success', data);
+    }, function(message) {
+        data.message = message;
+        this.option.markControl.trigger('history.get.error', data);
+    });
+}
+
+MarkControl.prototype.setTask = function(task) {
+    var imageBuilder = this.modules['image-builder'];
+    var self = this;
+
+    if (this.context.task != undefined && !this.context.task.previous && this.context.waitTask == undefined) {
+        this.context.waitTask = this.context.task;
+    }
+    this.trigger('task.get.before');
+    if (imageBuilder != undefined && task != undefined) {
+        imageBuilder.build(task, function(error) {
+            self.context.task = task;
+            self.trigger('task.get.success');
+        });
+    } else {
+        self.context.task = task;
+        if (task != undefined) {
+            this.trigger('task.get.success');
+        }
+    }
+}
+
+MarkControl.prototype.submitTask = function(submitUrl) {
+    var task = this.context.task;
+    var markControl = this;
+    var submitUrl = submitUrl != undefined && submitUrl.length > 0 ? submitUrl : this.option.submitUrl;
+
+    if (task != undefined && this.context.submitting != true) {
+        task.markStepList = undefined;
+        task.pictureUrls = undefined;
+        task.sheetUrls = undefined;
+        task.imageData = undefined;
+        task.markFinish = undefined;
+        task.markTime = undefined;
+
+        this.trigger('task.submit.before');
+        if (this.taskControl != undefined) {
+            //已定义任务引擎
+            this.taskControl.submit(task, function(status) {
+                if (status != undefined && status.valid == true) {
+                    markControl.context.status = status;
+                    markControl.trigger('mark.status.change', status);
+                }
+                //markControl.context.task = undefined;
+                markControl.trigger('task.submit.success');
+                //markControl.getTask();
+            }, function(message) {
+                markControl.trigger('task.submit.error', message);
+            });
+        } else if (submitUrl != undefined && submitUrl.length > 0) {
+            //未定义任务引擎,依赖定义/传入的提交地址
+            $.ajax({
+                url: submitUrl,
+                type: 'POST',
+                data: task,
+                success: function(result) {
+                    if (result.success == true) {
+                        //markControl.context.task = undefined;
+                        markControl.trigger('task.submit.success');
+                        //markControl.getTask();
+                    } else {
+                        markControl.trigger('task.submit.error', result.message);
+                    }
+                },
+                error: function(message) {
+                    markControl.trigger('task.submit.error', message);
+                }
+            });
+        } else {
+            markControl.trigger('task.submit.success');
+            //markControl.getTask();
+        }
+    }
+}
+
+//默认要初始化的模块名称
+MarkControl.prototype.defaultModules = {
+    'image-builder': {}
+};
+
+MarkControl.prototype.main_row_dom = '<div class="row-fluid" style="background-image:url({staticServer}/mark-new/images/background.jpg)"></div>';
+
+MarkControl.prototype.sidebar_dom = '<div class="mark-sidebar span2 hide"></div>';
+
+MarkControl.prototype.center_dom = '<div class="center-content span12"></div>';
+
+MarkControl.prototype.center_header_dom = '<div class="row-fluid"><div class="header"><p class="tips">\
+<em>\
+<a href="javascript:void(0)" id="assistant-button" class="btn"><i class="icon-wrench"></i> 小助手</a></em>\
+<a class="useinfo" href="#"><i class="icon-user icon-white"></i><i id="mark-user-name"></i></a>\
+<a class="logout" id="logout-link" href="{logoutUrl}"><i class="icon-off icon-white"></i> <i id="logout-title">退出</i></a>\
+</p></div></div>';
+
+MarkControl.prototype.center_content_dom = '<div class="row-fluid"></div>';
+
+MarkControl.prototype.image_content_dom = '<div class="image-content span12"></div>';
+
+MarkControl.prototype.assistant_dom = '<div class="popover bottom assistant"><div class="arrow"></div></div>';
+
+MarkControl.prototype.mark_function_dom = '<h3 class="popover-title">评卷功能</h3>\
+<div class="popover-content"><p id="function-list" class="popover-list">\
+</p></div>';
+
+//其他通用方法
+String.prototype.startWith = function(prefix) {
+    return this.indexOf(prefix) === 0;
+}
+String.prototype.endWith = function(suffix) {
+    return this.match(suffix + "$") == suffix;
+};
+
+//日期格式化
+Date.prototype.format = function(fmt) { //author: meizz 
+    var o = {
+        "M+": this.getMonth() + 1, //月份 
+        "d+": this.getDate(), //日 
+        "h+": this.getHours(), //小时 
+        "m+": this.getMinutes(), //分 
+        "s+": this.getSeconds(), //秒 
+        "q+": Math.floor((this.getMonth() + 3) / 3), //季度 
+        "S": this.getMilliseconds() //毫秒 
+    };
+    if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
+    for (var k in o) {
+        if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
+    }
+    return fmt;
+}
+
+function getDom(content, markControl) {
+    if (markControl != undefined && markControl.option.staticServer != undefined) {
+        content = content.replace(/{staticServer}/g, markControl.option.staticServer);
+    }
+    if (markControl != undefined && markControl.option.logoutUrl != undefined) {
+        content = content.replace(/{logoutUrl}/g, markControl.option.logoutUrl);
+    }
+    return $(content);
+}
+
+function isArray(obj) {
+    return obj != undefined && Object.prototype.toString.call(obj) === '[object Array]';
+}

+ 38 - 0
stmms-web/src/main/webapp/static/mark-leader/js/modules/answer-view.js

@@ -0,0 +1,38 @@
+//查看答案模块
+var answer_view = function(option, success) {
+    var object = new AnswerView(option);
+    success();
+    return object;
+}
+
+function AnswerView(option) {
+    this.markControl = option.markControl;
+    this.server = option.server;
+    this.init();
+    this.markControl.on('task.get.success', this, function(event, context, eventObject) {
+        this.render(this.server + context.task.answerUrl);
+    });
+    this.markControl.on('task.get.none', this, function(event, context, eventObject) {
+        this.render();
+    });
+    this.markControl.on('task.get.before', this, function(event, context, eventObject) {
+        this.render();
+    });
+}
+
+AnswerView.prototype.init = function() {
+    this.markControl.initMarkFunction();
+    this.toggleButton = getDom(this.toggle_button_dom, this.markControl).appendTo(this.markControl.container.assistant.functionList);
+}
+
+AnswerView.prototype.render = function(url) {
+    if (url != undefined && url.length > 0) {
+        this.toggleButton.attr('href', url);
+        this.toggleButton.show();
+    } else {
+        this.toggleButton.attr('href', '##');
+        this.toggleButton.hide();
+    }
+}
+
+AnswerView.prototype.toggle_button_dom = '<a href="#" target="_blank">标答</a>';

+ 59 - 0
stmms-web/src/main/webapp/static/mark-leader/js/modules/arbitration-process.js

@@ -0,0 +1,59 @@
+//回评模块
+var arbitration_process = function(option, success) {
+    var object = new ArbitrationProcess(option);
+    success();
+    return object;
+}
+
+function ArbitrationProcess(option) {
+    this.markControl = option.markControl;
+    this.container = this.markControl.container.sidebar;
+    this.init();
+
+    this.markControl.on('task.get.none', this, function(event, context, data) {
+        this.container.list.empty();
+        this.markControl.trigger('mark.sidebar.close');
+        this.container.addClass('hide');
+    });
+    this.markControl.on('task.get.success', this, function(event, context, data) {
+        if (context.task.previous != true) {
+            var historyList = context.task.arbitrationList;
+            this.container.list.empty();
+            if (isArray(historyList) && historyList.length > 0) {
+                for (var i in historyList) {
+                    var history = historyList[i];
+                    var row = getDom(this.history_row_dom, this.markControl).appendTo(this.container.list);
+                    row.find('.history-name').html(history.markerName);
+
+                    var date = new Date();
+                    date.setTime(history.markTime);
+                    row.find('.history-time').html(date.format('hh:mm:ss'));
+                    row.find('.history-score').html(history.totalScore);
+                }
+            }
+            this.markControl.trigger('mark.sidebar.open');
+            this.container.removeClass('hide');
+        }
+    });
+    this.markControl.on('mark.history.open', this, function(event, context, data) {
+        this.container.addClass('hide');
+    });
+}
+
+ArbitrationProcess.prototype.init = function() {
+    this.container.empty();
+
+    this.container.header = getDom(this.header_dom, this.markControl).appendTo(this.container);
+    this.container.list = getDom(this.history_list_dom, this.markControl).appendTo(this.container).find('#history-list');
+}
+
+
+ArbitrationProcess.prototype.header_dom = '<div class="header">\
+<p class="fl">给分记录</p></div>';
+
+ArbitrationProcess.prototype.history_list_dom = '<div class="sublist"><table class="table table-hover">\
+<thead><tr><th>评卷员</th><th>时间</th><th>总分</th></tr></thead>\
+<tbody id="history-list"></tbody></table></div>';
+
+ArbitrationProcess.prototype.history_row_dom = '<tr><td class="history-name"></td>\
+<td class="history-time"></td><td class="history-score"></td></tr>';

+ 47 - 0
stmms-web/src/main/webapp/static/mark-leader/js/modules/back-process.js

@@ -0,0 +1,47 @@
+//打回处理模块
+var back_process = function(option, success) {
+    var object = new BackProcess(option);
+    success();
+    return object;
+}
+
+function BackProcess(option) {
+    this.markControl = option.markControl;
+    this.autoSubmit = option.autoSubmit === false ? false : true;
+    this.init();
+    this.markControl.on('task.get.before', this, function(event, context, eventObject) {
+        this.task = undefined;
+        this.button.hide();
+    });
+    this.markControl.on('task.get.none', this, function(event, context, eventObject) {
+        this.task = undefined;
+        this.button.hide();
+    });
+    this.markControl.on('task.get.success', this, function(event, context, eventObject) {
+        this.task = context.task;
+        this.button.show();
+    });
+}
+
+BackProcess.prototype.init = function() {
+    var self = this;
+
+    this.markControl.initMarkFunction();
+    this.button = getDom(this.button_dom, this.markControl).appendTo(this.markControl.container.assistant.functionList);
+    this.button.click(this, function() {
+        self.onBackSelect();
+    });
+}
+
+BackProcess.prototype.onBackSelect = function() {
+    if (this.task != undefined) {
+        this.task.back = true;
+        if (this.autoSubmit == false && confirm('确认要将本试卷打回?')) {
+            this.markControl.submitTask();
+        } else if (this.autoSubmit == true) {
+            this.markControl.submitTask();
+        }
+    }
+}
+
+BackProcess.prototype.button_dom = '<a class="back-process-button" href="#">打回</a>';

+ 105 - 0
stmms-web/src/main/webapp/static/mark-leader/js/modules/change-name.js

@@ -0,0 +1,105 @@
+//评卷状态模块
+var change_name = function(option, success) {
+    var object = new ChangeName(option);
+    success();
+    return object;
+}
+
+function ChangeName(option) {
+    this.markControl = option.markControl;
+    this.url = option.url;
+    this.context = option.markControl.context;
+    this.userName = option.markControl.container.header.find('#mark-user-name');
+    this.popover = getDom(this.popover_dom, this.markControl);
+    this.popover.userNameInput = this.popover.find('input.username-input');
+    this.popover.passwordInput = this.popover.find('input.password-input');
+    this.popover.password2Input = this.popover.find('input.password2-input');
+    this.popover.userNameMessage = this.popover.find('i.username');
+    this.popover.password2Message = this.popover.find('i.password2');
+    this.popover.submitButton = this.popover.find('a.btn');
+    this.popover.cancelButton = this.popover.find('p.image-close');
+    this.popover.appendTo(this.markControl.container);
+
+    var self = this;
+
+    this.markControl.container.header.find('a.useinfo').click(function() {
+        self.toggle(true);
+    });
+    this.popover.cancelButton.click(function() {
+        self.toggle(false);
+    });
+    this.popover.submitButton.click(function() {
+              var logout = false;
+              var nameText = self.popover.userNameInput.val();
+                  nameText = nameText.replace(/(^\s*)|(\s*$)/g, "");
+              var pwText = self.popover.passwordInput.val();
+                  pwText = pwText.replace(/(^\s*)|(\s*$)/g, "");
+              var pw2Text = self.popover.password2Input.val();
+                  pw2Text = pw2Text.replace(/(^\s*)|(\s*$)/g, "");
+              if (nameText.length == 0) {
+                  self.popover.userNameMessage.html('姓名不能为空');
+                  return false;
+              } else if (nameText.length > 8) {
+                  self.popover.userNameMessage.html('长度不能超过8个字');
+                  return false;
+              }
+              if(pwText.length > 0 || pw2Text.length > 0) {
+                  logout = true;
+                  if (!pw2Text) {
+                    self.popover.password2Message.html('请再次输入您的密码');
+                    return false;
+                  }
+                  if (pwText != pw2Text) {
+                    self.popover.password2Message.html('两次密码请保持一致');
+                    return false;
+                  }
+                  if(pw2Text.length < 4){
+                    self.popover.password2Message.html('密码的长度至少4位');
+                    return false;
+                  }
+              }
+                $.post(self.url, {
+                    name: nameText,
+                    password:pwText
+                }, function(result) {
+                    if (result.success == true) {
+                        self.userName.html(result.name);
+                        self.toggle(false);
+                        if(logout){//修改密码后请重新登陆
+                          window.location.href = '/mark/logout';
+                        }
+                    } else {
+                        self.popover.userNameMessage.html('修改失败,请稍后重试');
+                    }
+                }).error(function() {
+                    self.popover.userNameMessage.html('网络通信错误,请稍后重试');
+                });
+    });
+}
+
+ChangeName.prototype.toggle = function(enable) {
+    if (enable == true) {
+        this.enable = true;
+        this.popover.userNameInput.val(this.userName.html());
+        this.popover.passwordInput.val('');
+        this.popover.userNameMessage.html('');
+        this.popover.password2Message.html('');
+        this.popover.show();
+        this.context.listenKeyboard = false;
+    } else {
+        this.enable = false;
+        this.popover.hide();
+        this.context.listenKeyboard = true;
+    }
+}
+
+ChangeName.prototype.popover_dom = '<div class="message-popover" style="display:none"><div class="popover-header">\
+<p class="title">修改个人信息</p><p class="image-close"><img src="{staticServer}/mark-new/images/images-close.png" /></p></div>\
+<div class="popover-cont"><span style="color: red;">*</span><input type="text" class="username-input" placeholder="请输入您的姓名" />\
+<i class="wrong username"></i></div>\
+<div class="popover-cont"><input type="password" class="password-input" placeholder="请输入新的密码" />\
+ <i class="wrong password"></i></div>\
+ <div class="popover-cont"><input type="password" class="password2-input" placeholder="请再次输入您的密码" /> \
+ <i class="wrong password2"></i></div>\
+<a href="#" class="btn btn-small btn-info text-userInfo">确定</a>\
+</div>';

+ 50 - 0
stmms-web/src/main/webapp/static/mark-leader/js/modules/flash-image-view.js

@@ -0,0 +1,50 @@
+var flashImageView;
+
+var flash_image_view = function(option, success) {
+    flashImageView = new FlashImageView(option);
+    flashImageView.createSuccess = success;
+    return flashImageView;
+}
+
+function FlashImageView(option) {
+    this.markControl = option.markControl;
+    this.init();
+    this.markControl.on('task.get.before', this, function(event, context, eventObject) {
+        this.task = undefined;
+    });
+    this.markControl.on('task.get.success', this, function(event, context, eventObject) {
+        this.task = context.task;
+        this.imageCount = this.task.pictureUrls.length;
+        this.imageServer = context.imageServer;
+        //refreshPictureConfig(this.task.pictureConfig, this.task.pictureUrls, this.imageServer);
+        getSwfObject('ImageViewer').setJson(this.task.pictureConfig);
+    });
+}
+
+FlashImageView.prototype.init = function() {
+    this.container = getDom(this.container_dom, this.markControl).appendTo(this.markControl.container.center);
+    var path = this.markControl.context.staticServer + '/plugin/';
+    var container = this.container;
+    $.getScript(path + 'swfobject.js', function() {
+        $.getScript(path + 'swfplugin.js', function() {
+            initImageViewPluginDefault(path, "viewer", container.width(), container.height());
+        });
+    });
+}
+
+function refreshPictureConfig(config, urls, imageServer) {
+    if (urls != undefined && urls.length > 0 && config != undefined && config != '') {
+        for (var i = 0; i < urls.length; i++) {
+            eval('config=config.replace(/\\{' + i + '\\}/, "' + (imageServer + urls[i]) + '")');
+        }
+        getSwfObject('ImageViewer').setJson(config);
+    }
+}
+
+function creationComplete() {
+    flashImageView.createSuccess();
+}
+
+function loadComplete() {}
+
+FlashImageView.prototype.container_dom = '<div id="viewer"></div>';

+ 81 - 0
stmms-web/src/main/webapp/static/mark-leader/js/modules/header-mark-status.js

@@ -0,0 +1,81 @@
+//评卷状态模块
+var header_mark_status = function(option, success) {
+    var object = new HeaderMarkStatus(option);
+    success();
+    return object;
+}
+
+function HeaderMarkStatus(option) {
+    this.markControl = option.markControl;
+    this.title = option.title;
+    this.init();
+    this.markControl.on('task.get.before', this, function(event, context, statusInfo) {
+        //this.topStatus.find('#type-name').html('正在领取任务');
+        this.secretArea.hide();
+        this.blockTitle.hide();
+    });
+    this.markControl.on('task.get.success', this, function(event, context, eventObject) {
+        var task = context.task;
+        //状态栏区域
+        this.blockTitle.show();
+        this.blockTitle.html(task.blockTitle);
+
+        var typeName = task.libraryType < this.typeName.length ? this.typeName[task.libraryType] : '';
+        //this.topStatus.find('#type-name').html(typeName);
+
+        this.secretArea.show();
+        this.topStatus.find('#secret-number').html(task.studentId);
+    });
+    this.markControl.on('task.get.none', this, function(event, context, status) {
+        this.secretArea.hide();
+        this.blockTitle.hide();
+        this.topStatus.find('#block-title').html();
+        //this.topStatus.find('#type-name').html('');
+        this.topStatus.find('#secret-number').html('');
+    });
+    this.markControl.on('mark.status.change', this, function(event, context, status) {
+        this.render(status);
+    });
+}
+
+HeaderMarkStatus.prototype.init = function() {
+    this.progress = getDom(this.progress_dom, this.markControl).prependTo(this.markControl.container.header);
+    this.topStatus = getDom(this.top_status_dom, this.markControl).prependTo(this.markControl.container.header);
+    this.secretArea = this.topStatus.find('#secret-area');
+    this.secretArea.hide();
+    this.progress.hide();
+
+    this.blockTitle = this.topStatus.find('#block-title');
+    this.topStatus.find('#status-title').html(this.title);
+}
+
+HeaderMarkStatus.prototype.render = function(status) {
+    if (status != undefined && status.valid === true) {
+        this.progress.show();
+        //进度信息区域
+        var totalCount = status.blockTotalCount;
+        var markedCount = status.blockMarkedCount;
+        var leftCount = totalCount > markedCount ? (totalCount - markedCount) : 0;
+        var markedPercent = totalCount > 0 ? new Number((totalCount - leftCount) * 100 / totalCount).toFixed(0) : 0;
+        if (markedPercent == '100' && leftCount > 0) {
+            markedPercent = '99';
+        } else if (markedPercent == '0' && markedCount > 0) {
+            markedPercent = '1';
+        }
+        this.progress.find('#total-count').html(totalCount);
+        this.progress.find('#marked-count').html(markedCount);
+        //this.progress.find('#todo-count').html(leftCount);
+        //this.progress.find('#marked-percent').html(markedPercent.toString() + '%');
+    }
+}
+
+HeaderMarkStatus.prototype.typeName = ['样卷', '试评', '正评'];
+
+HeaderMarkStatus.prototype.top_status_dom = '<p class="text">\
+<i id="status-title"></i>\
+<i id="type-name"></i>\
+<i id="block-title"></i>\
+<i id="secret-area">考生编号<em id="secret-number"></em></i>\
+</p>';
+
+HeaderMarkStatus.prototype.progress_dom = '<p class="text"></p>';

+ 80 - 0
stmms-web/src/main/webapp/static/mark-leader/js/modules/heart-beat.js

@@ -0,0 +1,80 @@
+//评卷状态模块
+var heart_beat = function(option, success) {
+    var object = new HeartBeat(option);
+    success();
+    return object;
+}
+
+function HeartBeat(option) {
+    this.markControl = option.markControl;
+    this.url = option.url;
+    this.interval = parseInt(option.interval) != undefined ? parseInt(option.interval) : 20;
+
+    this.popover = getDom(this.popover_dom, this.markControl);
+    this.popover.content = this.popover.find('.popover-cont');
+    this.popover.confirmButton = this.popover.find('#message-confirm-button');
+    this.popover.nextButton = this.popover.find('#message-next-button');
+
+    this.popover.hide();
+    this.popover.appendTo(this.markControl.container);
+
+    var self = this;
+    this.popover.confirmButton.click(function() {
+        self.popover.hide();
+    });
+    this.popover.nextButton.click(function() {
+        self.index++;
+        self.showMessage();
+    });
+
+    if (this.url != undefined && this.url != '') {
+        this.beat();
+    }
+}
+
+HeartBeat.prototype.beat = function() {
+    var self = this;
+    $.ajax({
+        method: 'POST',
+        url: this.url,
+        timeout: 10000,
+        success: function(message) {
+            if (message != undefined && message.length > 0) {
+                self.initMessage(message);
+            }
+        },
+        complete: function() {
+            setTimeout(function() {
+                self.beat();
+            }, self.interval * 1000);
+        }
+    });
+}
+
+HeartBeat.prototype.initMessage = function(message) {
+    this.message = message;
+    this.index = 0;
+    this.showMessage();
+}
+
+HeartBeat.prototype.showMessage = function() {
+    if (this.index < this.message.length) {
+        this.popover.content.html(this.message[this.index]);
+        if (this.index == (this.message.length - 1)) {
+            this.popover.confirmButton.show();
+            this.popover.nextButton.hide();
+        } else {
+            this.popover.confirmButton.hide();
+            this.popover.nextButton.show();
+        }
+        this.popover.show();
+    } else {
+        this.popover.hide();
+    }
+}
+
+HeartBeat.prototype.popover_dom = '<div class="message-popover"><div class="popover-header">\
+<p class="title">通知</p></div><div class="popover-cont"></div>\
+<a href="#" class="btn btn-large btn-info text-c" id="message-next-button" style="display:none">下一条</a>\
+<a href="#" class="btn btn-large btn-info text-c" id="message-confirm-button" style="display:none">确 定</a>\
+</div>';

+ 38 - 0
stmms-web/src/main/webapp/static/mark-leader/js/modules/idle-process.js

@@ -0,0 +1,38 @@
+//评卷状态模块
+var idle_process = function(option, success) {
+    var object = new IdleProcess(option);
+    success();
+    return object;
+}
+
+function IdleProcess(option) {
+    this.markControl = option.markControl;
+    this.logoutUrl = option.logoutUrl;
+    this.timeoutMinute = parseInt(option.timeout) != undefined ? parseInt(option.timeout) : 3;
+    this.intervalSecond = 15;
+
+    this.markControl.on('task.get.success', this, function(event, context, eventObject) {
+        this.libraryId = context.task.libraryId;
+        this.start = new Date().getTime();
+    });
+
+    this.process();
+}
+
+IdleProcess.prototype.process = function() {
+    var self = this;
+    if (this.lastLibraryId == undefined) {
+        this.lastLibraryId = this.libraryId;
+    }
+    var now = new Date().getTime();
+    if (this.lastLibraryId != undefined && this.libraryId != undefined && this.start != undefined) {
+        if (this.lastLibraryId == this.libraryId) {
+            if ((now - this.start) > (this.timeoutMinute * 60 * 1000)) {
+                window.location.href = this.logoutUrl;
+            }
+        }
+    }
+    setTimeout(function() {
+        self.process();
+    }, self.intervalSecond * 1000);
+}

+ 87 - 0
stmms-web/src/main/webapp/static/mark-leader/js/modules/image-builder.js

@@ -0,0 +1,87 @@
+//简单多张图片排列显示模块
+var image_builder = function(option, success) {
+    var object = new ImageBuilder(option);
+    success();
+    return object;
+}
+
+function ImageBuilder(option) {
+    this.markControl = option.markControl;
+    this.init();
+}
+
+ImageBuilder.prototype.init = function() {
+    this.container = getDom(this.canvas_dom, this.markControl).appendTo(this.markControl.container);
+    this.container.hide();
+    this.canvas = document.getElementById('image-builder-canvas');
+    this.ctx = this.canvas.getContext("2d");
+}
+
+ImageBuilder.prototype.build = function(task, callback) {
+    var self = this;
+    //调用图片预加载函数,实现回调函数
+    var imageObjects = [];
+    this.loadImages(imageObjects, task.pictureUrls, 0, function(images) {
+        var maxWidth = 0;
+        var totalHeight = 0;
+        for (var i = 0; i < images.length; i++) {
+            //计算最大宽度与合计高度
+            var image = images[i];
+            maxWidth = Math.max(maxWidth, image.width);
+            totalHeight += image.height;
+        }
+        if (maxWidth > 0 && totalHeight > 0) {
+            //设置画布大小及背景颜色
+            self.canvas.width = maxWidth;
+            self.canvas.height = totalHeight;
+            self.ctx.fillStyle = "#FFFFFF";
+            self.ctx.fillRect(0, 0, maxWidth, totalHeight);
+            //绘画到画布
+            var height = 0;
+            for (var i = 0; i < images.length; i++) {
+                var image = images[i];
+                self.ctx.drawImage(image, 0, 0, image.width, image.height, 0, height, image.width, image.height);
+                height += image.height;
+            }
+            //生成合并后的图像数据
+            task.imageData = this.canvas.toDataURL("image/jpeg");
+            self.ctx.clearRect(0, 0, self.canvas.width, self.canvas.height);
+        }
+        callback();
+    }, function(error) {
+        if (error) {
+            console.log(error);
+        }
+        callback('image load error');
+    });
+}
+
+/*
+实现一系列图片的预加载
+参数urls:图片实际URL数组
+参数number:array数组遍历下标
+参数callback:回调函数——图片预加载完成后立即执行此函数
+*/
+ImageBuilder.prototype.loadImages = function(images, urls, number, callback, exception) {
+    var self = this;
+    var imageServer = this.markControl.context.imageServer;
+    var defaultServer = this.markControl.option.imageServer;
+    if (urls != undefined && number < urls.length) {
+        var img = new Image();
+        img.onload = function() {
+            images.push(img);
+            self.loadImages(images, urls, number + 1, callback, exception);
+        }
+        img.onerror = function() {
+            img.onerror = undefined;
+            //self.loadImages(images, urls, number + 1, callback);
+            exception('load error for: ' + img.src);
+        }
+        img.crossOrigin = '';
+        img.src = imageServer + urls[number] + '?' + new Date().getTime();
+    } else {
+        callback.call(this, images);
+    }
+}
+
+ImageBuilder.prototype.canvas_dom = '<div><canvas id="image-builder-canvas"></canvas></div>';

+ 37 - 0
stmms-web/src/main/webapp/static/mark-leader/js/modules/image-server-selector.js

@@ -0,0 +1,37 @@
+//评卷状态模块
+var image_server_selector = function(option, success) {
+    var object = new ImageServerSelector(option);
+    success();
+    return object;
+}
+
+function ImageServerSelector(option) {
+    this.markControl = option.markControl;
+    this.servers = option.servers;
+    this.flag = option.flag != undefined && option.flag.length > 0 ? option.flag : '/ok.jpg';
+
+    this.connect(0);
+}
+
+ImageServerSelector.prototype.connect = function(index) {
+    if (isArray(this.servers) && this.servers.length > index) {
+        var self = this;
+        var url = this.servers[index].trim();
+        if (url.length > 0) {
+            $.ajax({
+                url: url + this.flag,
+                type: 'GET',
+                cache: false,
+                //timeout: 1000,
+                error: function() {
+                    self.connect(index + 1);
+                },
+                success: function() {
+                    self.markControl.context.imageServer = url;
+                }
+            });
+        } else {
+            self.connect(index + 1);
+        }
+    }
+}

+ 690 - 0
stmms-web/src/main/webapp/static/mark-leader/js/modules/mark-board.js

@@ -0,0 +1,690 @@
+//给分板模块
+var mark_board = function(option, success) {
+    var object = new MarkBoard(option);
+    success();
+    return object;
+}
+
+function MarkBoard(option) {
+    this.markControl = option.markControl;
+    this.needConfirm = option.needConfirm === true ? true : false;
+    this.autoSubmit = option.autoSubmit === false ? false : true;
+    this.showScoreBoard = option.showScoreBoard === false ? false : true;
+    this.enableSkip = option.enableSkip === true ? true : false;
+
+    this.init();
+    this.markControl.on('task.get.before', this, function(event, context, eventObject) {
+        this.task = undefined;
+        this.stepList = undefined;
+        this.currentStep = undefined;
+        this.stepCount = undefined;
+        this.render();
+    });
+    this.markControl.on('task.load.finish', this, function(event, context, eventObject) {
+        this.initByTask(context.task);
+    });
+    this.markControl.on('mark.step.change', this, this.onStepSelect);
+    this.markControl.on('key.press', this, function(e, context, event) {
+        var code = event.keyCode;
+        //console.log('key press:' + code);
+        if (this.currentStep != undefined && this.task != undefined) {
+            if (code >= 48 && code <= 57) {
+                this.onNumberInput(code - 48);
+                event.preventDefault();
+                return false;
+            } else if (code >= 96 && code <= 105 && event.numLock) {
+                this.onNumberInput(code - 96);
+                event.preventDefault();
+                return false;
+            } else if (code == 46 || code == 110 || code == 190) {
+                //小数点
+                this.onDecimalInput();
+                event.preventDefault();
+                return false;
+            } else if (code == 45) {
+                //-按键,切换到上一个步骤
+                if (this.currentStep.number > 1) {
+                    this.resetCurrentStep();
+                    this.markControl.trigger('mark.step.change', this.currentStep.number - 1);
+                    event.preventDefault();
+                    return false;
+                }
+            } else if (code == 61 || code == 43) {
+                //+按键,切换到下一个步骤
+                if (this.currentStep.number < this.stepCount && this.currentStep.markScore != undefined) {
+                    this.resetCurrentStep();
+                    this.markControl.trigger('mark.step.change', this.currentStep.number + 1);
+                    event.preventDefault();
+                    return false;
+                }
+            } else if (code == 13 || code == 108) {
+                //回车键
+                if (this.currentStep.markFinish === true && this.task.markFinish === true) {
+                    this.onTaskSubmit();
+                    event.preventDefault();
+                    return false;
+                } else {
+                    this.onNumberSubmit();
+                    event.preventDefault();
+                    return false;
+                }
+            }
+        }
+    });
+    this.markControl.on('key.down', this, function(e, context, event) {
+        var code = event.keyCode;
+        //console.log('key down:' + code);
+        if (this.currentStep != undefined && this.task != undefined) {
+            if (code == 8 || code == 46) {
+                //删除键&回退键
+                this.onNumberDelete();
+                event.preventDefault();
+                return false;
+            } else if (code == 32) {
+                //屏蔽空格键按下效果
+                return false;
+            } else if (code == 80 && this.enableSkip) {
+                //P键,跳过当前任务
+                this.markControl.trigger('task.pass.success');
+            }
+        }
+    });
+    this.markControl.on('key.up', this, function(e, context, event) {
+        var code = event.keyCode;
+        //console.log('key down:' + code);
+        if (this.currentStep != undefined && this.task != undefined) {
+            if (code == 32) {
+                //空格键提交步骤分
+                this.onNumberSubmit();
+                event.preventDefault();
+                return false;
+            }
+        }
+    });
+
+}
+
+MarkBoard.prototype.init = function() {
+    this.stepBoard = getDom(this.step_board_dom, this.markControl).appendTo(this.markControl.container.centerContent);
+    this.stepBoard.height(this.markControl.container.centerContent.height());
+    this.stepBoard.selectiveHeader = this.stepBoard.find('#step-board-selective-header');
+    this.stepBoard.stepHolder = this.stepBoard.find('.step-list');
+    this.stepBoard.stepHolder.height(this.markControl.container.centerContent.height() - 90);
+    this.stepBoard.stepHolder.perfectScrollbar({
+        wheelSpeed: 20,
+        useKeyboard: false,
+        minScrollbarLength: 30,
+        suppressScrollX: true
+    });
+
+    this.scoreBoard = getDom(this.scoreBoard_dom, this.markControl).appendTo(this.markControl.container);
+    this.scoreBoard.header = getDom(this.scoreBoard_header_dom, this.markControl).appendTo(this.scoreBoard).find('#score-board-header');
+    this.scoreBoard.stepHolder = getDom(this.scoreBoard_stepHolder_dom, this.markControl).appendTo(this.scoreBoard);
+    this.scoreBoard.footer = getDom(this.scoreBoard_footer_dom, this.markControl).appendTo(this.scoreBoard).find('#score-board-total-score');
+
+    this.scoreBoard.stepHolder.css('max-height', $(window).height() * 0.75);
+    this.scoreBoard.stepHolder.css('overflow', 'scroll');
+
+    this.scoreBoard.draggable({
+        containment: "window"
+    });
+
+    this.scoreBoard.find('#task-submit-button').click(this, function(event) {
+        var markBoard = event.data;
+        if (markBoard.task != undefined && markBoard.currentStep.markFinish === true) {
+            markBoard.onTaskSubmit();
+        }
+    });
+    this.scoreBoard.find('#resetBtn').click(this, function(event) {
+        var markBoard = event.data;
+        var selectedBlockId = $(".block-id-list  option:selected").val();
+        if (markBoard.task != undefined) {
+            if (markBoard.task.blockId == selectedBlockId) {
+                alert("不能重新分发到同一题!");
+                return false;
+            } else if (selectedBlockId == 0) {
+                alert("必须选择一题分发!");
+                return false;
+            } else {
+                markBoard.task.reset = true;
+                markBoard.task.blockId = selectedBlockId;
+                markBoard.onTaskSubmit();
+            }
+        }
+    });
+    $('#resetBtn').click(this, function(event) {
+        var markBoard = event.data;
+        var selectedBlockId = $(".block-id-list  option:selected").val();
+        if (markBoard.task != undefined) {
+            if (markBoard.task.blockId == selectedBlockId) {
+                alert("不能重新分发到同一题!");
+                return false;
+            } else if (selectedBlockId == 0) {
+                alert("必须选择一题分发!");
+                return false;
+            } else {
+                markBoard.task.reset = true;
+                markBoard.task.blockId = selectedBlockId;
+                markBoard.onTaskSubmit();
+            }
+        }
+    });
+    if (this.enableSkip) {
+        this.scoreBoard.find('#task-pass-button').show();
+        this.scoreBoard.find('#task-pass-button').click(this, function(event) {
+            var markBoard = event.data;
+            markBoard.markControl.trigger('task.pass.success');
+        });
+    }
+    this.scoreBoard.find('#score-board-close-button').click(this, function(event) {
+        event.data.toggleScoreBoard(false);
+    });
+    this.stepBoard.find('#show-score-board-button').click(this, function(event) {
+        event.data.toggleScoreBoard(true);
+    });
+    this.scoreBoard.find('.all-zero-button').click(this, function(event) {
+        event.data.allZeroSubmit();
+    });
+    this.stepBoard.find('.all-zero-button').click(this, function(event) {
+        event.data.allZeroSubmit();
+    });
+
+    this.popover = getDom(this.popover_dom, this.markControl).appendTo(this.markControl.container);
+    this.popover.css('text-align', 'center');
+
+    this.popover.title = this.popover.find('.popover-title');
+    this.popover.title.css('font-size', '20px');
+    this.popover.title.css('line-height', '25px');
+    //this.popover.width('100');
+    //this.popover.title.width('100');
+}
+
+MarkBoard.prototype.initByTask = function(task) {
+    this.task = task;
+    this.stepList = task.markStepList;
+    this.currentStep = undefined;
+    this.stepCount = this.stepList != undefined ? this.stepList.length : 0;
+
+    task.totalScore = parseFloat(task.totalScore);
+    var markFinish = true;
+    var scoreList = task.scoreList != undefined && task.scoreList != '' ? task.scoreList.split(',') : [];
+    for (var j in task.markStepList) {
+        var step = task.markStepList[j];
+        if (scoreList != undefined && scoreList.length > j) {
+            step.markScore = parseFloat(scoreList[j]);
+            step.score = new String(step.markScore);
+            step.markFinish = true;
+        } else {
+            markFinish = false;
+        }
+    }
+    task.markFinish = task.totalScore != undefined && markFinish == true;
+
+    this.render(task);
+    if (this.stepCount > 0) {
+        this.markControl.trigger('mark.step.change', 1);
+    } else if (task.markFinish == true) {
+        this.currentStep = {
+            markFinish: true
+        };
+    }
+}
+
+MarkBoard.prototype.onDecimalInput = function() {
+    var score = this.currentStep.score;
+    if (this.currentStep.interval < 1 && !score.endWith('.')) {
+        score = score + '.';
+    }
+    this.currentStep.score = score;
+    this.currentStep.markFinish = false;
+    this.onScoreChange();
+}
+
+MarkBoard.prototype.onNumberInput = function(number) {
+    this.currentStep.score = this.currentStep.score + '' + number;
+    this.currentStep.markFinish = false;
+    this.onScoreChange();
+}
+
+MarkBoard.prototype.onNumberDelete = function(number) {
+    var score = this.currentStep.score;
+    if (score.length > 1) {
+        score = score.substring(0, score.length - 1);
+    } else {
+        score = '';
+    }
+    this.currentStep.score = score;
+    this.currentStep.markFinish = false;
+    this.onScoreChange();
+}
+
+MarkBoard.prototype.onNumberSubmit = function() {
+    var score = this.currentStep.score;
+    var interval = this.currentStep.interval;
+    if (score.length > 0) {
+        if (interval < 1 && score.startWith('.')) {
+            score = '0'.concat(score);
+        } else if (interval < 1 && score.endWith('.')) {
+            score = score.concat(interval.toString().substring(2));
+        }
+    }
+    if (this.validateScore(this.currentStep, score)) {
+        this.onScoreSubmit(true);
+    } else if (this.showScoreBoard == true) {
+        //分值表模式下,自动清除已输入的无效内容,免去删除操作
+        this.resetCurrentStep();
+        this.onScoreChange();
+    }
+}
+
+//切换步骤时,重置当前步骤的状态
+//若当前分数未提交,则还原之前已给的分数;若之前还未给分,则清空分数显示
+MarkBoard.prototype.resetCurrentStep = function() {
+    var step = this.currentStep;
+    if (step != undefined) {
+        if (step.markScore != undefined) {
+            step.markFinish = true;
+            step.score = new String(step.markScore);
+        } else {
+            step.markFinish = false;
+            step.score = '';
+        }
+        this.markControl.trigger('mark.score.change');
+    }
+}
+
+MarkBoard.prototype.onStepSelect = function(event, context, stepNumber) {
+    if (stepNumber <= this.stepCount && stepNumber > 0) {
+        //还是点击当前步骤,不触发任何动作
+        if (this.currentStep != undefined && this.currentStep.number == stepNumber) {
+            return;
+        }
+        //修改原step状态
+        if (this.currentStep != undefined) {
+            var dom = this.stepBoard.stepArray[this.currentStep.number - 1];
+            dom.removeClass('current');
+            if (this.currentStep.markScore != undefined) {
+                dom.addClass('done');
+                dom.find('.current-score').html(this.currentStep.markScore);
+            } else {
+                dom.addClass('todo');
+                dom.find('.current-score').html('');
+            }
+        }
+        this.togglePopover(false);
+
+        this.currentStep = this.stepList[stepNumber - 1];
+        if (this.currentStep.score == undefined) {
+            this.currentStep.score = '';
+        }
+        dom = this.stepBoard.stepArray[stepNumber - 1];
+        dom.removeClass('done');
+        dom.removeClass('todo');
+        dom.addClass('current');
+        //step列表自动滚动
+        //alert(this.stepBoard.stepHolder.height() - dom.height());
+        var scrollTop = this.stepBoard.stepHolder.scrollTop();
+        var maxHeight = this.stepBoard.stepHolder.height();
+        var domTop = dom.position().top;
+        var domHeight = dom.height();
+        if (domTop < 0 && scrollTop > 0) {
+            scrollTop = Math.max(scrollTop - domHeight, 0);
+        } else if ((domTop + domHeight) > maxHeight) {
+            scrollTop += (domTop + domHeight - maxHeight + 5);
+        }
+        this.stepBoard.stepHolder.scrollTop(scrollTop);
+    }
+}
+
+MarkBoard.prototype.onScoreChange = function() {
+    if (this.currentStep != undefined) {
+        var dom = this.stepBoard.stepArray[this.currentStep.number - 1];
+        dom.find('.current-score').html(this.currentStep.score);
+
+        this.togglePopover(false);
+    }
+}
+
+MarkBoard.prototype.onScoreSubmit = function(autoNext) {
+    if (this.currentStep != undefined) {
+        this.currentStep.markScore = parseFloat(this.currentStep.score);
+        this.currentStep.markFinish = true;
+        this.onScoreChange();
+        this.updateTotalScore();
+
+        this.stepBoard.find('#total-score').html(this.task.totalScore);
+        this.scoreBoard.footer.html(this.task.totalScore);
+        var currentScore = this.currentStep.score;
+        this.scoreBoard.stepArray[this.currentStep.number - 1].find('.score-select').each(function(index, obj) {
+            if ($(obj).attr('data-score') == currentScore) {
+                $(obj).addClass('active');
+            } else {
+                $(obj).removeClass('active');
+            }
+        });
+        this.markControl.trigger('mark.score.change');
+        if (autoNext === true && this.currentStep.number < this.stepCount) {
+            this.markControl.trigger('mark.step.change', this.currentStep.number + 1);
+        } else if (this.task.markFinish === true && this.showScoreBoard == false && this.autoSubmit === true) {
+            this.onTaskSubmit();
+        }
+    }
+}
+
+MarkBoard.prototype.updateTotalScore = function() {
+    if (this.task != undefined) {
+        var totalScore = 0;
+        var finish = true;
+        for (var i in this.stepList) {
+            if (this.stepList[i].markScore != undefined) {
+                totalScore = totalScore + this.stepList[i].markScore;
+            } else {
+                finish = false;
+            }
+        }
+        this.task.totalScore = totalScore;
+        this.task.markFinish = finish;
+    }
+}
+
+MarkBoard.prototype.allZeroSubmit = function() {
+    if (this.task != undefined && this.stepList != undefined && this.stepList.length > 0) {
+        for (var i in this.stepList) {
+            this.stepList[i].markScore = 0;
+        }
+        this.onTaskSubmit();
+    }
+}
+
+MarkBoard.prototype.onTaskSubmit = function() {
+    var totalScore = 0;
+    var scoreList = [];
+    var finish = true;
+    for (var i in this.stepList) {
+        var score = this.stepList[i].markScore;
+        if (score != undefined) {
+            totalScore = totalScore + score;
+            scoreList.push(score);
+        } else {
+            finish = false;
+        }
+    }
+    if (this.task.reset) {
+        finish = true;
+    }
+    if (!finish) {
+        alert('当前任务还有未给分的步骤,请继续给分');
+    } else if (!this.needConfirm || confirm('总分为' + totalScore + ', 确认要提交吗?')) {
+        this.task.totalScore = totalScore;
+        this.task.scoreList = scoreList.join(',');
+        this.markControl.submitTask();
+    }
+}
+
+MarkBoard.prototype.validateScore = function(step, scoreString) {
+    var stepDom = this.stepBoard.stepArray[this.currentStep.number - 1].find('.current-score');
+    if (!$.isNumeric(scoreString)) {
+        this.togglePopover(true, '不是合法数字', stepDom);
+        //alert('当前分数不是合法数字');
+        return false;
+    }
+    var score = new Number(scoreString);
+    if (score < step.min) {
+        this.togglePopover(true, '不能小于' + step.min, stepDom);
+        //alert('当前分数不应小于' + step.min);
+        return false;
+    }
+    if (score > step.max) {
+        this.togglePopover(true, '不能大于' + step.max, stepDom);
+        //alert('当前分数不应大于' + step.max);
+        return false;
+    }
+    var find = false;
+    if (step.scoreList.length > 0) {
+        for (var i in step.scoreList) {
+            if (score == step.scoreList[i]) {
+                find = true;
+            }
+        }
+    }
+    if (!find) {
+        this.togglePopover(true, '不符合分值间隔要求', stepDom);
+        //alert('当前分数不符合分值间隔要求');
+        return false;
+    }
+    step.score = scoreString;
+    return true;
+}
+
+MarkBoard.prototype.render = function(task) {
+    if (task != undefined) {
+        var self = this;
+        var title = task.blockTitle;
+        this.initMarkBoardHeader();
+
+        this.stepBoard.stepHolder.empty();
+        this.stepBoard.stepArray = [];
+        if (task.markFinish === true) {
+            this.stepBoard.find('#total-score').html(task.totalScore);
+            this.scoreBoard.footer.html(task.totalScore);
+        } else {
+            this.stepBoard.find('#total-score').html('');
+            this.scoreBoard.footer.html('');
+        }
+
+        this.scoreBoard.stepHolder.empty();
+        this.scoreBoard.stepArray = [];
+        for (var i in task.markStepList) {
+            var step = task.markStepList[i];
+            //初始化步骤列表
+            var dom = getDom(this.step_dom, this.markControl);
+            dom.attr('data-number', step.number);
+            dom.find('.step-title').html(step.title);
+            dom.find('.interval-score').html('间隔' + step.interval + '分');
+            dom.find('.max-score').html(step.max);
+            dom.find('.min-score').html(step.min);
+            if (step.markFinish === true) {
+                dom.addClass('done');
+                dom.find('.current-score').html(step.score);
+            } else {
+                dom.addClass('todo');
+            }
+            dom.click(function() {
+                self.onStepSelect(undefined, undefined, $(this).attr('data-number'));
+            })
+            this.stepBoard.stepArray.push(dom.appendTo(this.stepBoard.stepHolder));
+            //初始化分值表
+            var dom2 = getDom(this.scoreBoard_step_dom, this.markControl);
+            dom2.attr('data-number', step.number);
+            dom2.find('.number').html(step.title);
+            var scoreHolder = dom2.find('.fraction');
+            for (var j in step.scoreList) {
+                var dom3 = getDom(this.scoreBoard_score_dom, this.markControl);
+                var score = step.scoreList[j];
+                dom3.attr('data-step-number', step.number);
+                dom3.attr('data-score', score);
+                dom3.html(score);
+                dom3.appendTo(scoreHolder);
+
+                if (step.markFinish === true && step.markScore == score) {
+                    dom3.addClass('active');
+                }
+            }
+            this.scoreBoard.stepArray.push(dom2.appendTo(this.scoreBoard.stepHolder));
+        }
+        this.toggleScoreBoard(this.showScoreBoard);
+
+        this.scoreBoard.find('.score-select').click(this, function(event) {
+            var markBoard = event.data;
+            if (markBoard.task != undefined) {
+                var object = $(event.target);
+                markBoard.markControl.trigger('mark.step.change', object.attr('data-step-number'));
+                markBoard.currentStep.score = object.attr('data-score');
+                markBoard.onScoreSubmit();
+            }
+        });
+    } else {
+        this.initMarkBoardHeader();
+
+        this.stepBoard.stepHolder.empty();
+        this.stepBoard.stepArray = [];
+        this.stepBoard.find('#total-score').html('');
+        this.stepBoard.hide();
+
+        this.scoreBoard.stepHolder.empty();
+        this.scoreBoard.stepArray = [];
+        this.scoreBoard.hide();
+    }
+}
+
+MarkBoard.prototype.initMarkBoardHeader = function() {
+    var self = this;
+    if (this.task == undefined) {
+        this.stepBoard.selectiveHeader.hide();
+        this.scoreBoard.header.html('');
+    } else {
+        var group = this.task.selectiveGroup;
+        if (group != undefined) {
+            this.scoreBoard.header.empty();
+            var blockSelect = (this.scoreBoard.header).append(this.scoreBoard_selective_dom).find('select');
+            blockSelect.append('<option value="0">无</option>');
+            if (group.blockList != undefined) {
+                for (var i = 0; i < group.blockList.length; i++) {
+                    var block = group.blockList[i];
+                    var selected = this.task.blockId == block.id ? 'selected' : '';
+
+                    blockSelect.append('<option value="' + block.id + '" ' + selected + '>' + block.title + '</option>');
+                }
+            }
+            blockSelect.change(function() {
+                self.onBlockChange($(this).val());
+            });
+
+            blockSelect = this.stepBoard.selectiveHeader.find('select');
+            blockSelect.empty();
+            blockSelect.append('<option value="0">无</option>');
+            if (group.blockList != undefined) {
+                for (var i = 0; i < group.blockList.length; i++) {
+                    var block = group.blockList[i];
+                    var selected = this.task.blockId == block.id ? 'selected' : '';
+
+                    blockSelect.append('<option value="' + block.id + '" ' + selected + '>' + block.title + '</option>');
+                }
+            }
+            blockSelect.unbind();
+            blockSelect.change(function() {
+                self.onBlockChange($(this).val());
+            });
+            this.stepBoard.selectiveHeader.show();
+        } else {
+            this.stepBoard.selectiveHeader.hide();
+            this.scoreBoard.header.html(this.task.blockTitle);
+        }
+    }
+}
+
+MarkBoard.prototype.toggleScoreBoard = function(show) {
+    this.resetCurrentStep();
+    if (show) {
+        this.markControl.trigger('step.board.hide');
+        this.showScoreBoard = true;
+        this.scoreBoard.show();
+        this.stepBoard.hide();
+    } else {
+        this.markControl.trigger('step.board.show');
+        this.showScoreBoard = false;
+        this.scoreBoard.hide();
+        this.stepBoard.show();
+    }
+}
+
+MarkBoard.prototype.onBlockChange = function(blockId) {
+    if (this.task != undefined && this.task.selectiveGroup != undefined) {
+        this.task.blockId = parseInt(blockId);
+        this.task.totalScore = 0;
+        this.task.scoreList = '';
+
+        var block = undefined;
+        for (var i = 0; i < this.task.selectiveGroup.blockList.length; i++) {
+            if (this.task.blockId == this.task.selectiveGroup.blockList[i].id) {
+                block = this.task.selectiveGroup.blockList[i];
+                break;
+            }
+        }
+        if (block != undefined) {
+            this.task.markStepList = block.markStepList;
+        } else {
+            this.task.markStepList = [];
+        }
+        this.initByTask(this.task);
+    }
+}
+
+MarkBoard.prototype.togglePopover = function(show, text, baseDom) {
+    var popover = this.popover;
+    if (show == true && baseDom != undefined) {
+        //console.log(baseDom.offset().top + ',' + baseDom.offset().left);
+        popover.offset({
+            top: baseDom.offset().top + 20,
+            left: baseDom.offset().left - popover.width()
+        });
+        popover.title.html(text);
+        popover.show();
+        //console.log(popover.offset().top + ',' + popover.offset().left);
+    } else {
+        popover.offset({
+            top: 0,
+            left: 0
+        })
+        popover.title.html('');
+        popover.hide();
+    }
+}
+
+MarkBoard.prototype.step_board_dom = '<div class="span2 mark-steps" style="display:none"><div class="step-board">\
+<a href="#" class="header" id="show-score-board-button"><< 鼠标给分</a>\
+<div class="sublist"><p class="fraction">总分 <i id="total-score">5</i></p><div>\
+<a href="#" class="header all-zero-button">全零分</a>\
+<div class="step-list"></div>\
+</div></div>';
+
+MarkBoard.prototype.step_dom = '<div><div class="number">\
+<div class="title step-title"></div>\
+<div class="num current-score"></div></div>\
+<div class="score">\
+<div class="title interval-score"></div>\
+<div class="num min-score"></div>\
+<div class="icon">▲</div>\
+<div class="num max-score"></div>\
+</div></div>';
+
+MarkBoard.prototype.scoreBoard_dom = '<div class="score-board score-board-popover" style="display:none"></div>';
+
+MarkBoard.prototype.scoreBoard_header_dom = '<div class="header">\
+<p class="fl" id="score-board-header"></p>\
+<a class="header-close" id="score-board-close-button" href="#">\
+<i class="header-text">键盘给分 >></i></a>\
+</div>';
+
+MarkBoard.prototype.scoreBoard_stepHolder_dom = '<div class="content"></div>';
+
+MarkBoard.prototype.scoreBoard_step_dom = '<div class="sublist">\
+<p class="number"></p>\
+<p class="fraction"></p>\
+</div>';
+
+MarkBoard.prototype.scoreBoard_score_dom = '<a href="#" class="score-select"></a>';
+
+MarkBoard.prototype.scoreBoard_footer_dom = '<div class="footer">\
+<p class="font">总分:<i class="yellow" id="score-board-total-score"></i></p>\
+<a id="task-submit-button" class="button" href="#">提 交</a>\
+<a class="button all-zero-button" href="##">全零分</a>\
+<a id="task-pass-button" class="button" href="#" style="display:none">跳 过</a>\
+</div>';
+
+MarkBoard.prototype.popover_dom = '<div class="popover left assistant">\
+<div class="arrow"></div>\
+<h3 class="popover-title"></h3></div>';
+
+MarkBoard.prototype.scoreBoard_selective_dom = '<i class="fl">选做结果</i>\
+<select class="block-id-list span1 mr-t"></select>';

+ 188 - 0
stmms-web/src/main/webapp/static/mark-leader/js/modules/mark-history.js

@@ -0,0 +1,188 @@
+//回评模块
+var mark_history = function(option, success) {
+    var object = new MarkHistory(option);
+    success();
+    return object;
+}
+
+function MarkHistory(option) {
+    this.markControl = option.markControl;
+    //this.url = option.url;
+    this.pageSize = option.pageSize;
+    this.taskList = [];
+    this.container = this.markControl.container.sidebar;
+    this.loading = false;
+
+    this.markControl.initMarkFunction();
+    this.container.toggleButton = getDom(this.toggle_button_dom, this.markControl).appendTo(this.markControl.container.assistant.functionList);
+    this.container.toggleButton.click(this, function(event) {
+        event.data.toggle(true);
+    });
+
+    this.markControl.on('history.get.success', this, function(event, context, data) {
+        var taskList = data.result;
+        this.taskList = [];
+        this.loading = false;
+        this.container.list.empty();
+        if (isArray(taskList) && taskList.length > 0) {
+            this.taskList = taskList;
+            for (var i in taskList) {
+                var task = taskList[i];
+                var row = getDom(this.history_row_dom, this.markControl).appendTo(this.container.list);
+                row.find('.history-secret-number').html(task.studentId);
+
+                var date = new Date();
+                date.setTime(task.markTime);
+                row.find('.history-time').html(date.format('hh:mm:ss'));
+                row.find('.history-score').html(task.totalScore);
+                row.attr('data-index', i);
+
+                //回评任务处理
+                task.previous = true;
+                // task.markFinish = true;
+                // task.totalScore = parseFloat(task.totalScore);
+                // var scoreList = task.scoreList != undefined ? task.scoreList.split(',') : [];
+                // for (var j in task.markStepList) {
+                //     var step = task.markStepList[j];
+                //     if (scoreList != undefined && scoreList.length > j) {
+                //         step.markScore = new Number(scoreList[j]);
+                //         step.score = new String(step.markScore);
+                //         step.markFinish = true;
+                //     }
+                // }
+            }
+        }
+        this.container.list.find('td').click(this, function(event) {
+            var markHistory = event.data;
+            var index = $(event.target).parent().attr('data-index');
+            markHistory.onTaskSelect(index);
+        });
+        this.pageNumber = data.pageNumber;
+        this.updateHeader();
+
+        if (this.taskList.length > 0) {
+            this.onTaskSelect(0);
+        }
+    });
+    this.markControl.on('history.get.error', this, function(event, context, data) {
+        alert('暂时无法读取评卷历史,请稍后重试');
+    });
+    this.markControl.on('task.submit.success', this, function(event, context, data) {
+        if (this.enable) {
+            this.toggle(false);
+        }
+    });
+    this.markControl.on('task.get.success', this, function(event, context, data) {
+        this.loading = false;
+    });
+}
+
+MarkHistory.prototype.init = function() {
+    this.container.empty();
+
+    this.container.header = getDom(this.header_dom, this.markControl).appendTo(this.container);
+    this.container.paginator = getDom(this.paginator_dom, this.markControl).appendTo(this.container);
+    this.container.list = getDom(this.history_list_dom, this.markControl).appendTo(this.container).find('#history-list');
+
+    this.container.header.find('#close-history-button').click(this, function(event) {
+        event.data.toggle(false);
+        this.markControl.context.task = undefined;
+        this.markControl.getTask();
+    })
+    this.container.paginator.find('#last-page-button').click(this, function(event) {
+        var markHistory = event.data;
+        markHistory.onSearch(markHistory.pageNumber + 1);
+    });
+    this.container.paginator.find('#next-page-button').click(this, function(event) {
+        var markHistory = event.data;
+        if (markHistory.pageNumber > 1) {
+            markHistory.onSearch(markHistory.pageNumber - 1);
+        }
+    });
+}
+
+MarkHistory.prototype.toggle = function(enable) {
+    this.enable = enable;
+    if (enable) {
+        this.init();
+        this.pageNumber = 1;
+        this.markControl.setTask(undefined);
+        this.markControl.trigger('mark.sidebar.open');
+        this.markControl.trigger('mark.history.open');
+        this.updateHeader();
+        this.container.list.empty();
+        this.container.removeClass('hide');
+        this.onSearch();
+    } else {
+        this.container.addClass('hide');
+        this.markControl.trigger('mark.sidebar.close');
+        this.markControl.trigger('mark.history.close');
+    }
+}
+
+MarkHistory.prototype.updateHeader = function() {
+    this.container.header.find('#history-start').html(this.pageSize * (this.pageNumber - 1));
+    this.container.header.find('#history-end').html(this.pageSize * this.pageNumber);
+
+    if (this.pageNumber == 1) {
+        this.container.paginator.find('#next-page-label').show();
+        this.container.paginator.find('#next-page-button').hide();
+    } else {
+        this.container.paginator.find('#next-page-label').hide();
+        this.container.paginator.find('#next-page-button').show();
+    }
+
+    if (this.taskList.length < this.pageSize) {
+        this.container.paginator.find('#last-page-label').show();
+        this.container.paginator.find('#last-page-button').hide();
+    } else {
+        this.container.paginator.find('#last-page-label').hide();
+        this.container.paginator.find('#last-page-button').show();
+    }
+}
+
+MarkHistory.prototype.onSearch = function(pageNumber) {
+    if (pageNumber == undefined || pageNumber < 1) {
+        pageNumber = 1;
+    }
+    this.markControl.getHistory({
+        pageNumber: pageNumber,
+        pageSize: this.pageSize
+    });
+}
+
+MarkHistory.prototype.onTaskSelect = function(index) {
+    var number = new String(index);
+    if (this.taskList != undefined && index < this.taskList.length && this.loading != true) {
+        this.container.list.find('tr').each(function(index, obj) {
+            if ($(obj).attr('data-index') == number) {
+                $(obj).addClass('active');
+            } else {
+                $(obj).removeClass('active');
+            }
+        });
+
+        var task = this.taskList[index];
+        this.markControl.setTask(task);
+        this.loading = true;
+    }
+}
+
+MarkHistory.prototype.toggle_button_dom = '<a href="#">回评</a>';
+
+MarkHistory.prototype.header_dom = '<div class="header">\
+<p class="fl">前<i class="yellow" id="history-start"></i>-前<i class="yellow" id="history-end"></i></p>\
+<a href="#" id="close-history-button"><img src="{staticServer}/mark-new/images/hp-close.png"></a>\
+</div>';
+
+MarkHistory.prototype.paginator_dom = '<div class="m-pagination"><a id="last-page-button" href="#">上一页</a>\
+<i id="last-page-label">上一页</i>\
+<a id="next-page-button" href="#">下一页</a>\
+<i id="next-page-label">下一页</i></div>';
+
+MarkHistory.prototype.history_list_dom = '<div class="sublist"><table class="table table-hover">\
+<thead><tr><th>编号</th><th>时间</th><th>总分</th></tr></thead>\
+<tbody id="history-list"></tbody></table></div>';
+
+MarkHistory.prototype.history_row_dom = '<tr><td class="history-secret-number"></td>\
+<td class="history-time"></td><td class="history-score"></td></tr>';

+ 147 - 0
stmms-web/src/main/webapp/static/mark-leader/js/modules/mark-status.js

@@ -0,0 +1,147 @@
+//评卷状态模块
+var mark_status = function(option, success) {
+    var object = new MarkStatus(option);
+    success();
+    return object;
+}
+
+function MarkStatus(option) {
+    this.markControl = option.markControl;
+    this.init(option);
+    this.markControl.on('task.get.before', this, function(event, context, statusInfo) {
+        this.topStatus.find('#stage-name').html('正在加载');
+    });
+    this.markControl.on('task.get.success', this, function(event, context, eventObject) {
+        var task = context.task;
+        //修改页面显示
+        this.topStatus.find('#stage-name').html('');
+        this.topStatus.find('#student-number').html(task.studentId);
+        this.studentTitle.show();
+
+        if (task.objectiveScore != undefined) {
+            this.objectiveArea.find('#objective-score').html(task.objectiveScore);
+            this.objectiveArea.show();
+        } else {
+            this.objectiveArea.hide();
+        }
+        this.checkTopCount(task);
+    });
+    this.markControl.on('task.get.none', this, function(event, context, status) {
+        this.topStatus.find('#stage-name').html('');
+        this.topStatus.find('#student-number').html('');
+        this.studentTitle.hide();
+        this.objectiveArea.hide();
+    });
+    this.markControl.on('task.get.finish', this, function(event, context, status) {
+        this.topStatus.find('#stage-name').html('');
+        this.topStatus.find('#student-number').html('');
+        this.studentTitle.hide();
+        this.objectiveArea.hide();
+    });
+    this.markControl.on('mark.status.change', this, function(event, context, status) {
+        this.status = status;
+        this.render(status);
+    });
+    this.markControl.on('view.sidebar.open', this, function(event, context, eventObject) {
+        this.blockProgress.hide();
+    });
+    this.markControl.on('view.sidebar.close', this, function(event, context, eventObject) {
+        this.blockProgress.show();
+    });
+}
+
+MarkStatus.prototype.init = function(option) {
+    this.topStatus = getDom(this.status_dom, this.markControl).prependTo(this.markControl.container.header);
+    this.blockProgress = getDom(this.progress_dom, this.markControl).insertAfter(this.topStatus);
+    this.subjectTitle = this.topStatus.find('#subject-title');
+    this.studentTitle = this.topStatus.find('#student-title');
+    this.objectiveArea = this.topStatus.find('#objective-area');
+
+    this.popover = getDom(this.popover_dom, this.markControl);
+    this.popover.hide();
+    this.popover.appendTo(this.markControl.container);
+    var self = this;
+    this.popover.find('#continue-button').click(function() {
+        self.ignoreTopCount = true;
+        self.popover.hide();
+    });
+
+    this.subjectTitle.find('#subject-name').html(option.subjectName);
+    if (option.subjectSelectUrl != undefined) {
+        this.subjectTitle.click(function() {
+            window.location.href = option.subjectSelectUrl;
+        });
+    }
+}
+
+MarkStatus.prototype.checkTopCount = function(task) {
+    //任务限额提示
+    if (task != undefined && task.previous != true && this.status != undefined && this.status.topCount > 0 && this.status.markedCount >= this.status.topCount && this.ignoreTopCount != true) {
+        this.popover.show();
+    } else {
+        this.popover.hide();
+    }
+}
+
+MarkStatus.prototype.render = function(status) {
+    if (status != undefined && status.valid === true) {
+        var topCount = status.topCount;
+        this.topStatus.find('#mark-count').html(status.personCount);
+
+        //大题进度信息区域
+        if (this.blockProgress != undefined) {
+            var totalCount = status.totalCount;
+            var markedCount = status.markedCount;
+            var exceptionCount = status.exceptionCount;
+            var leftCount = totalCount > (markedCount + exceptionCount) ? (totalCount - markedCount - exceptionCount) : 0;
+            var markedPercent = totalCount > 0 ? new Number((totalCount - leftCount) * 100 / totalCount).toFixed(0) : '0';
+            if (markedPercent == '100' && leftCount > 0) {
+                markedPercent = '99';
+            } else if (markedPercent == '0' && markedCount > 0) {
+                markedPercent = '1';
+            }
+            if(topCount > 0){
+                if(this.blockProgress.find('#top-count').length == 0){
+                  this.blockProgress.find('#todo-count').after('<i>任务数<em id="top-count"></em></i>');
+                  this.blockProgress.find('#top-count').html(topCount);
+                }
+            }
+            this.blockProgress.find('#total-count').html(totalCount);
+            this.blockProgress.find('#marked-count').html(markedCount);
+            this.blockProgress.find('#todo-count').html(leftCount);
+            this.blockProgress.find('#exception-count').html(exceptionCount);
+            this.blockProgress.find('#marked-percent').html(markedPercent + '%');
+        }
+
+        if (status.totalCount > 0 && status.totalCount == status.markedCount) {
+            this.markControl.context.isFinish = true;
+        }
+    }
+}
+
+MarkStatus.prototype.status_dom = '<p class="text">\
+<i id="subject-title" style="cursor:pointer"><em id="subject-name"></em></i>\
+<i id="stage-name"></i>\
+<i id="student-title">考生编号<em id="student-number"></em></i>\
+<i id="objective-area">客观得分<em id="objective-score"></em></i>\
+<i>评卷数<em id="mark-count"></em></i>\
+</p>';
+
+MarkStatus.prototype.progress_dom = '<p class="text">\
+<i>未评<em id="todo-count"></em></i>\
+<i>进度<em id="marked-percent"></em></i>\
+</p>';
+
+MarkStatus.prototype.block_progress_bak_dom = '<p class="text">\
+<i>总数<em id="total-count"></em></i>\
+<i>已评<em id="marked-count"></em></i>\
+<i>未评<em id="todo-count"></em></i>\
+<i>异常<em id="exception-count"></em></i>\
+<i>进度<em id="marked-percent"></em></i>\
+</p>';
+
+MarkStatus.prototype.popover_dom = '<div class="warning-popover">\
+<p>分配任务已评完,是否继续?</p>\
+<a href="#" class="btn btn-large btn-primary text-c" id="continue-button">继续</a>\
+<a href="{logoutUrl}" class="btn btn-large text-c" id="exit-button">退出</a>\
+</div>';

+ 268 - 0
stmms-web/src/main/webapp/static/mark-leader/js/modules/multi-image-view.js

@@ -0,0 +1,268 @@
+//简单多张图片排列显示模块
+var multi_image_view = function(option, success) {
+    var object = new MultiImageView(option);
+    success();
+    return object;
+}
+
+function MultiImageView(option) {
+    this.markControl = option.markControl;
+    this.defaultZoom = 'fit';
+    this.init();
+    this.markControl.on('task.get.before', this, function(event, context, eventObject) {
+        this.task = undefined;
+        this.imageCount = 0;
+        this.render();
+    });
+    this.markControl.on('task.get.success', this, function(event, context, eventObject) {
+        this.task = context.task;
+        this.imageCount = this.task.pictureUrls.length;
+        this.imageServer = context.imageServer;
+        this.render();
+    });
+    this.markControl.on('step.board.show', this, function(event, context, eventObject) {
+        this.container.removeClass('span12');
+        this.container.addClass('span10');
+
+        this.container.perfectScrollbar('update');
+        if (this.iviewer != undefined) {
+            this.iviewer.iviewer('update');
+        }
+    });
+    this.markControl.on('step.board.hide', this, function(event, context, eventObject) {
+        this.container.removeClass('span10');
+        this.container.addClass('span12');
+
+        this.container.perfectScrollbar('update');
+        if (this.iviewer != undefined) {
+            this.iviewer.iviewer('update');
+        }
+    });
+    this.markControl.on('center.width.change', this, function(event, context, eventObject) {
+        this.container.perfectScrollbar('update');
+        if (this.iviewer != undefined) {
+            this.iviewer.iviewer('update');
+        }
+    });
+    this.markControl.on('key.press', this, function(e, context, event) {
+        var code = event.keyCode;
+        if (this.iviewer != undefined && this.currentConfig != undefined && this.imageCount > 0) {
+            if (code == 91) {
+                // [按键,切换上一张图片
+                var number = this.currentConfig.number;
+                if (number > 1) {
+                    this.change(number - 1);
+                    event.preventDefault();
+                    return false;
+                }
+            } else if (code == 93) {
+                // ]按键,切换下一张图片
+                var number = this.currentConfig.number;
+                if (number < this.imageCount) {
+                    this.change(number + 1);
+                    event.preventDefault();
+                    return false;
+                }
+            }
+        }
+    });
+    this.markControl.on('key.up', this, function(e, context, event) {
+        var code = event.keyCode;
+        if (this.iviewer != undefined && this.currentConfig != undefined && this.imageCount > 0) {
+            if (code == 37) {
+                // left按键,切换上一张图片
+                var number = this.currentConfig.number;
+                if (number > 1) {
+                    this.change(number - 1);
+                    event.preventDefault();
+                    return false;
+                }
+            } else if (code == 39) {
+                // right按键,切换下一张图片
+                var number = this.currentConfig.number;
+                if (number < this.imageCount) {
+                    this.change(number + 1);
+                    event.preventDefault();
+                    return false;
+                }
+            }
+        }
+
+    });
+}
+
+MultiImageView.prototype.init = function() {
+    this.configCache = {};
+    this.container = getDom(this.container_dom, this.markControl).appendTo(this.markControl.container.center);
+    this.container.perfectScrollbar({
+        wheelSpeed: 20
+    });
+    this.container.width('100%');
+    this.container.height(this.markControl.container.height() - 41);
+
+    this.imageHolder = getDom(this.imageHolder_dom, this.markControl).appendTo(this.container);
+    this.imageHolder.width('100%');
+
+    this.centerHeader = getDom(this.center_header_dom, this.markControl).appendTo(this.markControl.container.header.find('p.pictures')).parent();
+    this.centerHeader.hide();
+    this.imageControl = getDom(this.image_control_dom, this.markControl).appendTo(this.markControl.container);
+    this.imageControl.css('position', 'absolute');
+    this.imageSwitchList = this.imageControl.find('#image-switch-list');
+
+    this.centerHeader.click(this, function(event) {
+        var obj = event.data.centerHeader;
+        var position = obj.offset();
+        var left = position.left;
+        var top = position.top + obj.height();
+        event.data.imageControl.css('top', top);
+        event.data.imageControl.css('left', left);
+        event.data.imageControl.toggle();
+    });
+    this.imageControl.find('a.image-popover-close').click(this, function(event) {
+        event.data.imageControl.hide();
+    });
+    this.imageControl.find('#zoom-out-button').click(this, function(event) {
+        var iviewer = event.data.iviewer;
+        if (iviewer != undefined) {
+            iviewer.iviewer('zoom_by', 1);
+        }
+    });
+    this.imageControl.find('#zoom-in-button').click(this, function(event) {
+        var iviewer = event.data.iviewer;
+        if (iviewer != undefined) {
+            iviewer.iviewer('zoom_by', -1);
+        }
+    });
+    this.imageControl.find('#zoom-fit-button').click(this, function(event) {
+        var iviewer = event.data.iviewer;
+        if (iviewer != undefined) {
+            iviewer.iviewer('fit');
+        }
+    });
+    this.imageControl.find('#zoom-origin-button').click(this, function(event) {
+        var iviewer = event.data.iviewer;
+        if (iviewer != undefined) {
+            iviewer.iviewer('set_zoom', 100);
+        }
+    });
+}
+
+MultiImageView.prototype.render = function() {
+    if (this.task != undefined) {
+        var config = this.configCache[this.task.blockId];
+        if (config == undefined) {
+            config = {
+                number: 1,
+                zoom: this.defaultZoom
+            };
+            this.configCache[this.task.blockId] = config;
+        }
+        if (config.number == undefined || config.number < 0 || config.number > this.imageCount) {
+            config.number = 1;
+        }
+        this.currentConfig = config;
+
+        for (var i = 1; i <= this.imageCount; i++) {
+            var switchButton = getDom(this.image_switch_button_dom, this.markControl).appendTo(this.imageSwitchList);
+            switchButton.html(i);
+            switchButton.attr('data-number', i);
+            if (i == config.number) {
+                switchButton.addClass('curr');
+            }
+        }
+        this.imageSwitchList.find('.image-switch-button').click(this, function(event) {
+            var number = $(event.target).attr('data-number');
+            event.data.change(number, config.zoom, config);
+            event.data.imageControl.hide();
+        });
+
+        if (this.iviewer == undefined) {
+            var MultiImageView = this;
+            this.iviewer = this.imageHolder.iviewer({
+                src: this.imageServer + this.task.pictureUrls[config.number - 1],
+                zoom: config.zoom,
+                ui_disabled: true,
+                mousewheel: false,
+                zoom_animation: false,
+                onZoom: function(ev, new_zoom) {
+                    MultiImageView.onZoomSet(new_zoom);
+                },
+                onStopDrag: function(ev, point) {
+                    MultiImageView.onStopDrag(point);
+                },
+                onFinishLoad: function(ev, url) {
+                    MultiImageView.onImageLoad();
+                }
+            });
+            this.centerHeader.find('#image-number').html(config.number);
+        } else {
+            this.change(config.number, config.zoom, config);
+        }
+        this.imageHolder.show();
+        this.centerHeader.show();
+
+        this.imageHolder.trigger('mouseenter');
+    } else {
+        this.centerHeader.hide();
+        this.imageHolder.hide();
+        this.currentConfig = undefined;
+        this.imageSwitchList.empty();
+    }
+}
+
+MultiImageView.prototype.change = function(number) {
+    if (this.task != undefined && number > 0 && number <= this.imageCount && this.currentConfig != undefined && this.currentConfig.loading == false) {
+        this.currentConfig.loading = true;
+        this.currentConfig.number = number;
+
+        this.iviewer.iviewer('loadImage', this.imageServer + this.task.pictureUrls[number - 1]);
+        this.centerHeader.find('#image-number').html(number);
+        this.imageSwitchList.find('.image-switch-button').each(function(index, obj) {
+            if ($(obj).attr('data-number') == number) {
+                $(obj).addClass('curr');
+            } else {
+                $(obj).removeClass('curr');
+            }
+        });
+    }
+}
+
+MultiImageView.prototype.onImageLoad = function() {
+    this.currentConfig.loading = false;
+    this.imageHolder.find('img').css('top', '0');
+    this.iviewer.iviewer('set_zoom', this.currentConfig.zoom);
+    if (this.currentConfig.dx != undefined && this.currentConfig.dy != undefined) {
+        this.iviewer.iviewer('moveTo', point.dx, point.dy);
+    }
+}
+
+MultiImageView.prototype.onZoomSet = function(zoom) {
+    if (this.currentConfig.loading == false) {
+        this.currentConfig.zoom = zoom;
+    }
+}
+
+MultiImageView.prototype.onStopDrag = function(point) {
+    if (this.currentConfig.loading == false) {
+        this.currentConfig.dx = point.x;
+        this.currentConfig.dy = point.y;
+    }
+}
+
+MultiImageView.prototype.container_dom = '<div class="content"></div>';
+
+MultiImageView.prototype.imageHolder_dom = '<div style="position:relative"></div>';
+
+MultiImageView.prototype.center_header_dom = '<i class="L-pic">当前图片</i><i id="image-number" class="R-pic"></i>';
+
+MultiImageView.prototype.image_control_dom = '<div class="image-popover hide">\
+<div class="image-control">\
+<span class="control-row"><p class="title">图片切换</p><p class="content" id="image-switch-list"></p></span>\
+<span class="control-row"><p class="title">图片控制</p>\
+<p class="content">\
+<a href="#" id="zoom-out-button">放大</a><a href="#" id="zoom-in-button">缩小</a>\
+<a href="#" id="zoom-fit-button">1:1</a><a href="#" id="zoom-origin-button">原始</a>\
+</p></span></div>\
+<a href="#" class="image-popover-close"><p>关</p><p>闭</p></a></div>';
+
+MultiImageView.prototype.image_switch_button_dom = '<a href="#" class="image-switch-button"></a>';

+ 38 - 0
stmms-web/src/main/webapp/static/mark-leader/js/modules/paper-view.js

@@ -0,0 +1,38 @@
+//查看试卷模块
+var paper_view = function(option, success) {
+    var object = new PaperView(option);
+    success();
+    return object;
+}
+
+function PaperView(option) {
+    this.markControl = option.markControl;
+    this.server = option.server;
+    this.init();
+    this.markControl.on('task.get.success', this, function(event, context, eventObject) {
+        this.render(this.server + context.task.paperUrl);
+    });
+    this.markControl.on('task.get.none', this, function(event, context, eventObject) {
+        this.render();
+    });
+    this.markControl.on('task.get.before', this, function(event, context, eventObject) {
+        this.render();
+    });
+}
+
+PaperView.prototype.init = function() {
+    this.markControl.initMarkFunction();
+    this.toggleButton = getDom(this.toggle_button_dom, this.markControl).appendTo(this.markControl.container.assistant.functionList);
+}
+
+PaperView.prototype.render = function(url) {
+    if (url != undefined && url.length > 0) {
+        this.toggleButton.attr('href', url);
+        this.toggleButton.show();
+    } else {
+        this.toggleButton.attr('href', '##');
+        this.toggleButton.hide();
+    }
+}
+
+PaperView.prototype.toggle_button_dom = '<a href="#" target="_blank">试卷</a>';

+ 105 - 0
stmms-web/src/main/webapp/static/mark-leader/js/modules/problem-process.js

@@ -0,0 +1,105 @@
+//问题卷处理模块
+var problem_process = function(option, success) {
+    var object = new ProblemProcess(option);
+    success();
+    return object;
+}
+
+function ProblemProcess(option) {
+    this.markControl = option.markControl;
+    this.autoSubmit = false;
+    this.reasons = option.reasons;
+    this.init();
+    this.markControl.on('task.get.before', this, function(event, context, eventObject) {
+        this.task = undefined;
+        this.reasonType = undefined;
+    });
+    this.markControl.on('task.get.success', this, function(event, context, eventObject) {
+        this.task = context.task;
+        if (this.task.previous != true && this.task.back != true) {
+            this.container.show();
+        } else {
+            this.container.hide();
+        }
+    });
+    this.markControl.on('task.get.none', this, function(event, context, eventObject) {
+        this.container.hide();
+    });
+    this.markControl.on('task.get.error', this, function(event, context, eventObject) {
+        this.container.hide();
+    });
+}
+
+ProblemProcess.prototype.init = function() {
+    this.container = getDom(this.container_dom, this.markControl).appendTo(this.markControl.container.assistant);
+    this.container.list = this.container.find('#problem-list');
+    this.container.title = this.container.find('.popover-title');
+    for (var i in this.reasons) {
+        var button = getDom(this.button_dom, this.markControl).appendTo(this.container.list);
+        button.attr('data-reason', i);
+        button.html(this.reasons[i]);
+    }
+    this.container.list.find('.problem-select-button').click(this, function(event) {
+        var problemProcess = event.data;
+        var button = $(event.target);
+
+        problemProcess.container.list.find('.problem-select-button').each(function(index, obj) {
+            $(obj).removeClass('curr');
+        });
+        problemProcess.onReasonSelect(button);
+    });
+
+    this.popover = getDom(this.popover_dom, this.markControl);
+    this.popover.hide();
+    this.popover.appendTo(this.markControl.container);
+    var self = this;
+    this.popover.find('#submit-button').click(function() {
+        self.submit();
+        self.reset();
+    });
+    this.popover.find('#cancel-button').click(function() {
+        self.reset();
+    });
+}
+
+ProblemProcess.prototype.reset = function() {
+    this.popover.hide();
+    this.container.list.find('.problem-select-button').each(function(index, obj) {
+        $(obj).removeClass('curr');
+    });
+}
+
+ProblemProcess.prototype.onReasonSelect = function(button) {
+    var self = this;
+    if (this.task != undefined && this.task.problem != true) {
+        button.addClass('curr');
+        this.reasonType = button.attr('data-reason');
+        if (this.autoSubmit) {
+            this.submit();
+        } else {
+            this.popover.show();
+        }
+    }
+    return false;
+}
+
+ProblemProcess.prototype.submit = function() {
+    if (this.task != undefined && this.reasonType != undefined) {
+        this.task.problem = true;
+        this.task.reason = this.reasonType;
+        this.markControl.submitTask();
+    }
+}
+
+
+ProblemProcess.prototype.container_dom = '<h3 class="popover-title">问题卷</h3>\
+<div class="popover-content"><p id="problem-list" class="popover-list">\
+</p></div>';
+
+ProblemProcess.prototype.button_dom = '<a class="problem-select-button" href="#"></a>';
+
+ProblemProcess.prototype.popover_dom = '<div class="warning-popover">\
+<p>确认要将本试卷置为问题卷吗?</p>\
+<a href="#" class="btn btn-large btn-primary text-c" id="submit-button">确定</a>\
+<a href="#" class="btn btn-large text-c" id="cancel-button">取消</a>\
+</div>';

+ 42 - 0
stmms-web/src/main/webapp/static/mark-leader/js/modules/sheet-view.js

@@ -0,0 +1,42 @@
+//查看原始题卡模块
+var sheet_view = function(option, success) {
+    var object = new SheetView(option);
+    success();
+    return object;
+}
+
+function SheetView(option) {
+    this.markControl = option.markControl;
+    this.server = option.server;
+    this.init();
+    this.markControl.on('task.get.success', this, function(event, context, eventObject) {
+        this.render(context.task.sheetUrls);
+    });
+    this.markControl.on('task.get.none', this, function(event, context, eventObject) {
+        this.render();
+    });
+    this.markControl.on('task.get.before', this, function(event, context, eventObject) {
+        this.render();
+    });
+}
+
+SheetView.prototype.init = function() {
+    this.markControl.initMarkFunction();
+    this.container = getDom(this.container_dom, this.markControl).appendTo(this.markControl.container.assistant).find('#sheet-list');
+}
+
+SheetView.prototype.render = function(urls) {
+    if (urls != undefined && urls.length > 0) {
+        this.container.empty();
+        for (var i = 0; i < urls.length; i++) {
+            this.container.append('<a href="' + (this.server + urls[i]) + '" target="_blank">' + (i + 1) + '</a>');
+        }
+        this.container.show();
+    } else {
+        this.container.hide();
+    }
+}
+
+SheetView.prototype.container_dom = '<h3 class="popover-title">查看原卷</h3>\
+<div class="popover-content"><p id="sheet-list" class="popover-list">\
+</p></div>';

+ 250 - 0
stmms-web/src/main/webapp/static/mark-leader/js/modules/single-image-view.js

@@ -0,0 +1,250 @@
+//简单多张图片排列显示模块
+var single_image_view = function(option, success) {
+    var object = new SingleImageView(option);
+    success();
+    return object;
+}
+
+function SingleImageView(option) {
+    this.markControl = option.markControl;
+    this.defaultZoom = 100;
+    this.loading = false;
+    this.init();
+    this.markControl.on('step.board.show', this, function(event, context, eventObject) {
+        this.container.removeClass('span12');
+        this.container.addClass('span10');
+
+        this.container.perfectScrollbar('update');
+        if (this.iviewer != undefined) {
+            this.iviewer.iviewer('update');
+        }
+    });
+    this.markControl.on('step.board.hide', this, function(event, context, eventObject) {
+        this.container.removeClass('span10');
+        this.container.addClass('span12');
+
+        this.container.perfectScrollbar('update');
+        if (this.iviewer != undefined) {
+            this.iviewer.iviewer('update');
+        }
+    });
+    this.markControl.on('center.width.change', this, function(event, context, eventObject) {
+        this.container.perfectScrollbar('update');
+        if (this.iviewer != undefined) {
+            this.iviewer.iviewer('update');
+            this.iviewer.iviewer('fit');
+        }
+    });
+    this.markControl.on('view.sidebar.open', this, function(event, context, eventObject) {
+        this.imageControl.hide();
+    });
+    this.markControl.on('view.sidebar.close', this, function(event, context, eventObject) {
+        this.imageControl.show();
+    });
+    this.markControl.on('task.get.before', this, function(event, context, eventObject) {
+        this.task = undefined;
+        this.render();
+    });
+    this.markControl.on('task.get.success', this, function(event, context, eventObject) {
+        this.task = context.task;
+        this.render();
+    });
+    this.markControl.on('task.get.none', this, function(event, context, eventObject) {
+        this.task = undefined;
+        this.render();
+    });
+    this.markControl.on('image.position.change', this, function(event, context, topPercent) {
+        if (this.task != undefined && this.loading == false) {
+            this.updateScrollTop(topPercent);
+        }
+    });
+}
+
+SingleImageView.prototype.init = function() {
+    this.configCache = {};
+
+    //this.container = getDom(this.container_dom).appendTo(this.markControl.container.imageContent);
+    this.container = this.markControl.container.imageContent;
+    this.container.height(this.markControl.container.centerContent.height());
+    this.container.perfectScrollbar({
+        wheelSpeed: 20
+    });
+
+    this.imageHolder = getDom(this.image_holder_dom, this.markControl).appendTo(this.container);
+    this.imageHolder.width('100%');
+
+    this.imageControl = getDom(this.image_control_dom, this.markControl).insertBefore(this.markControl.container.assistantButton.parent());
+    this.imageControl.find('.zoom-out-button').click(this, function(event) {
+        var iviewer = event.data.iviewer;
+        if (iviewer != undefined) {
+            iviewer.iviewer('zoom_by', 1);
+        }
+    });
+    this.imageControl.find('.zoom-in-button').click(this, function(event) {
+        var iviewer = event.data.iviewer;
+        if (iviewer != undefined) {
+            iviewer.iviewer('zoom_by', -1);
+        }
+    });
+    this.imageControl.find('.zoom-fit-button').click(this, function(event) {
+        var iviewer = event.data.iviewer;
+        if (iviewer != undefined) {
+            iviewer.iviewer('fit');
+        }
+    });
+    this.imageControl.find('.zoom-origin-button').click(this, function(event) {
+        var iviewer = event.data.iviewer;
+        if (iviewer != undefined) {
+            iviewer.iviewer('set_zoom', 100);
+        }
+    });
+    this.imageControl.find('.rotate-button').click(this, function(event) {
+        var iviewer = event.data.iviewer;
+        if (iviewer != undefined) {
+            iviewer.iviewer('angle', 90);
+        }
+    });
+    var self = this;
+    this.container.scroll(function() {
+        if (self.currentConfig != undefined) {
+            self.currentConfig.scrollTop = self.container.scrollTop() / self.imageHolder.height();
+            self.currentConfig.scrollLeft = self.container.scrollLeft() / self.imageHolder.width();
+        }
+    });
+}
+
+SingleImageView.prototype.render = function() {
+    if (this.task != undefined) {
+        var config = this.configCache[this.task.blockId];
+        if (config == undefined) {
+            config = {
+                zoom: this.defaultZoom
+            };
+            this.configCache[this.task.blockId] = config;
+        }
+        this.currentConfig = config;
+
+        this.loadImage();
+        // this.imageControl.show();
+        // this.imageHolder.show();
+        // this.imageHolder.trigger('mouseenter');
+    } else {
+        this.imageControl.hide();
+        this.imageHolder.hide();
+        this.currentConfig = undefined;
+    }
+}
+
+SingleImageView.prototype.loadImage = function() {
+    if (this.task.imageData != undefined && this.loading == false) {
+        this.loading = true;
+        if (this.iviewer == undefined) {
+            var self = this;
+            this.iviewer = this.imageHolder.iviewer({
+                src: self.task.imageData,
+                zoom_delta: 1.2,
+                zoom: 100,
+                zoom_min: 10,
+                ui_disabled: true,
+                mousewheel: false,
+                zoom_animation: false,
+                onAfterZoom: function(ev, new_zoom) {
+                    self.onZoomSet(new_zoom);
+                },
+                onStopDrag: function(ev, point) {
+                    self.onStopDrag(point);
+                },
+                onFinishLoad: function(ev, url) {
+                    self.onImageLoad();
+                },
+                angle: function(ev, info) {
+                    self.onRotate(info.angle);
+                }
+            });
+            this.imageHolder.css('overflow', '');
+        } else {
+            this.iviewer.iviewer('loadImage', this.task.imageData);
+        }
+    }
+}
+
+SingleImageView.prototype.onImageLoad = function() {
+    this.loading = false;
+    this.container.scrollTop(0);
+    if (this.currentConfig != undefined && this.currentConfig.zoom != undefined && this.currentConfig.zoom != this.defaultZoom) {
+        if (this.currentConfig.rotate != undefined && this.currentConfig.rotate > 0) {
+            this.iviewer.iviewer('angle', this.currentConfig.rotate);
+        }
+        if (this.currentConfig.zoom != undefined && this.currentConfig.zoom != this.defaultZoom) {
+            this.iviewer.iviewer('set_zoom', this.currentConfig.zoom);
+        }
+
+    }
+    //this.imageHolder.find('img').css('border', '2px solid');
+
+    // if (this.currentConfig.dx != undefined && this.currentConfig.dy != undefined) {
+    //     this.iviewer.iviewer('moveTo', this.currentConfig.dx, this.currentConfig.dy);
+    // }
+    this.imageControl.show();
+    this.imageHolder.show();
+    this.imageHolder.trigger('mouseenter');
+
+    this.markControl.trigger('task.load.finish');
+}
+
+SingleImageView.prototype.onZoomSet = function(zoom) {
+    if (this.loading == false && this.currentConfig != undefined) {
+        this.currentConfig.zoom = zoom;
+        this.updateScrollTop(this.currentConfig.scrollTop);
+        this.updateScrollLeft(this.currentConfig.scrollLeft);
+    }
+}
+
+SingleImageView.prototype.onStopDrag = function(point) {
+    if (this.loading == false) {
+        this.currentConfig.dx = point.x;
+        this.currentConfig.dy = point.y;
+    }
+}
+
+SingleImageView.prototype.onRotate = function(angle) {
+    if (this.loading == false) {
+        this.currentConfig.rotate = angle;
+    }
+}
+
+SingleImageView.prototype.updateScrollTop = function(scrollTopPercent) {
+    var height = this.imageHolder.height();
+    var minHeight = this.container.height();
+    if (scrollTopPercent != undefined && scrollTopPercent >= 0 && scrollTopPercent <= 1 && height > minHeight) {
+        var left = height * (1 - scrollTopPercent);
+        var scrollTop = left > minHeight ? (height - left) : (height - minHeight);
+        this.container.scrollTop(scrollTop);
+    } else {
+        this.container.scrollTop(0);
+    }
+}
+
+SingleImageView.prototype.updateScrollLeft = function(scrollLeftPercent) {
+    var width = this.imageHolder.width();
+    var minWidth = this.container.width();
+    if (scrollLeftPercent != undefined && scrollLeftPercent >= 0 && scrollLeftPercent <= 1 && width > minWidth) {
+        var left = width * (1 - scrollLeftPercent);
+        var scrollLeft = left > minWidth ? (width - left) : (width - minWidth);
+        this.container.scrollLeft(scrollLeft);
+    } else {
+        this.container.scrollLeft(0);
+    }
+}
+
+SingleImageView.prototype.container_dom = '<div class="image-content"></div>';
+
+SingleImageView.prototype.image_control_dom = '<em>\
+<a href="#" class="btn zoom-out-button">放大</a>\
+<a href="#" class="btn zoom-in-button">缩小</a>\
+<a href="#" class="btn zoom-fit-button">适应</a>\
+<a href="#" class="btn zoom-origin-button">原始</a>\
+<a href="#" class="btn rotate-button">旋转</a>\
+</em>';
+
+SingleImageView.prototype.image_holder_dom = '<div style="position: relative;"></div>';

+ 88 - 0
stmms-web/src/main/webapp/static/mark-leader/js/modules/tag-process.js

@@ -0,0 +1,88 @@
+//试卷标记处理模块
+var tag_process = function(option, success) {
+    var object = new TagProcess(option);
+    success();
+    return object;
+}
+
+function TagProcess(option) {
+    this.markControl = option.markControl;
+    this.url = option.url;
+    this.init();
+    this.markControl.on('task.get.before', this, function(event, context, eventObject) {
+        this.task = undefined;
+        this.reset();
+    });
+    this.markControl.on('task.get.success', this, function(event, context, eventObject) {
+        this.task = context.task;
+        this.reset();
+    });
+    this.markControl.on('task.get.none', this, function(event, context, eventObject) {
+        this.reset();
+    });
+    this.markControl.on('task.get.error', this, function(event, context, eventObject) {
+        this.reset();
+    });
+}
+
+TagProcess.prototype.init = function() {
+    this.container = getDom(this.container_dom, this.markControl).appendTo(this.markControl.container.assistant);
+    this.container.list = this.container.find('#type-list');
+    this.container.title = this.container.find('.popover-title');
+
+    var self = this;
+    $.post(this.url, function(result) {
+        for (var i = 0; i < result.length; i++) {
+            var button = getDom(self.button_dom, self.markControl).appendTo(self.container.list);
+            button.attr('data-value', result[i].value);
+            button.html(result[i].name);
+        }
+
+        self.container.list.find('.tag-button').click(function(event) {
+            $(this).toggleClass('curr');
+            self.onTypeSelect();
+        });
+    });
+}
+
+TagProcess.prototype.reset = function() {
+    //this.container.list.find('.tag-button').removeClass('curr');
+	var self = this;
+    if (this.task != undefined) {
+        this.container.list.find('.tag-button').each(function(index, obj) {
+            var value = $(obj).attr('data-value');
+            if (self.task.tags != undefined && self.task.tags.indexOf(value) != -1) {
+                $(obj).addClass('curr');
+            } else {
+                $(obj).removeClass('curr');
+            }
+        });
+        this.container.show();
+    } else {
+        this.container.hide();
+    }
+}
+
+TagProcess.prototype.onTypeSelect = function() {
+    var self = this;
+    if (this.task != undefined) {
+        var array = [];
+        this.container.list.find('.tag-button').each(function(index, obj) {
+            if ($(obj).hasClass('curr')) {
+                array.push($(obj).attr('data-value'));
+            }
+        });
+
+        if (array.length > 0) {
+            this.task.tags = array.join(',');
+        } else {
+            this.task.tags = undefined;
+        }
+    }
+}
+
+TagProcess.prototype.container_dom = '<h3 class="popover-title">标记试卷</h3>\
+<div class="popover-content"><p id="type-list" class="popover-list">\
+</p></div>';
+
+TagProcess.prototype.button_dom = '<a class="tag-button" href="#"></a>';

+ 122 - 0
stmms-web/src/main/webapp/static/mark-leader/js/modules/thumbnail.js

@@ -0,0 +1,122 @@
+//给分板模块
+var thumbnail = function (option, success) {
+    var object = new Thumbnail(option);
+    success();
+    return object;
+}
+
+function Thumbnail(option) {
+    this.markControl = option.markControl;
+    this.maxWidth = option.width != undefined ? option.width : 100;
+    this.show = false;
+    this.loading = false;
+    this.imageHeight = undefined;
+    this.mousePosition = undefined;
+
+    this.init();
+    this.markControl.on('task.get.before', this, function (event, context, eventObject) {
+        this.task = undefined;
+        this.render();
+    });
+    this.markControl.on('task.get.success', this, function (event, context, eventObject) {
+        this.task = context.task;
+        this.render();
+    });
+}
+
+Thumbnail.prototype.init = function () {
+    var self = this;
+    this.container = getDom(this.container_dom, this.markControl).appendTo(this.markControl.container);
+    this.container.width(this.maxWidth);
+    this.container.offset({
+        top: 60,
+        left: 0
+    });
+
+    this.container.header = getDom(this.container_header_dom, this.markControl).appendTo(this.container);
+    this.container.header.width('100%');
+
+    this.container.content = getDom(this.container_content_dom, this.markControl).appendTo(this.container);
+    this.container.content.width('100%');
+    this.imageObject = this.container.content.find('img');
+    this.imageObject.width('100%');
+    this.imageObject.bind('mouseover', function (e) {
+        self.updatePosition(e);
+    }).bind('mousemove', function (e) {
+        self.updatePosition(e);
+    }).bind('mouseout', function (e) {
+        self.updatePosition();
+    }).bind('click', function () {
+        if (self.show == true && self.task != undefined && self.mousePosition != undefined) {
+            self.markControl.trigger('image.position.change', self.mousePosition.y / self.imageObject.height())
+        }
+    });
+
+    this.container.draggable({
+        containment: "window"
+    });
+    this.container.header.find('#close-button').click(function () {
+        self.toggle(false);
+    });
+
+    this.control = getDom(this.control_dom, this.markControl).appendTo(this.markControl.container.assistant);
+    this.control.find('#show-thumbnail-button').click(function () {
+        self.markControl.container.assistant.hide();
+        self.toggle(true);
+    });
+    this.control.find('#hide-thumbnail-button').click(function () {
+        self.markControl.container.assistant.hide();
+        self.toggle(false);
+    });
+}
+
+Thumbnail.prototype.render = function () {
+    var self = this;
+    var imageObject = this.imageObject;
+    if (this.task != undefined) {
+        imageObject[0].src = this.task.imageData;
+        imageObject[0].onload = function () {
+            if (imageObject[0].height > (self.markControl.container.height() * 0.8)) {
+                self.container.content.height(self.markControl.container.height() * 0.8);
+            } else {
+                self.container.content.height(imageObject[0].height);
+            }
+            imageObject.show();
+        }
+    } else {
+        imageObject[0].src = '';
+        imageObject.hide();
+    }
+}
+
+Thumbnail.prototype.toggle = function (show) {
+    if (show == true) {
+        this.show = true;
+        this.container.show();
+    } else {
+        this.show = false;
+        this.container.hide();
+    }
+}
+
+Thumbnail.prototype.updatePosition = function (e) {
+    var position = this.imageObject.offset();
+    this.mousePosition = e != undefined ? {
+        x: e.pageX - position.left,
+        y: e.pageY - position.top
+    } : undefined;
+}
+
+Thumbnail.prototype.container_dom = '<div class="score-board score-board-popover" style="display:none"></div>';
+
+Thumbnail.prototype.container_header_dom = '<div class="header">\
+<p class="fl" id="header">缩略图</p>\
+<a class="header-close" id="close-button" href="#"><img src="{staticServer}/images/close.png"></a>\
+</div>';
+
+Thumbnail.prototype.container_content_dom = '<div class="content" style="padding:4px;overflow:scroll"><img src=""></div>';
+
+Thumbnail.prototype.control_dom = '<h3 class="popover-title">缩略图</h3>\
+<div class="popover-content"><p id="problem-list" class="popover-list">\
+<a href="#" id="show-thumbnail-button">打开</a><a href="#" id="hide-thumbnail-button">关闭</a>\
+</p></div>';

+ 89 - 0
stmms-web/src/main/webapp/static/mark-leader/js/modules/view-sidebar.js

@@ -0,0 +1,89 @@
+//回评模块
+var view_sidebar = function(option, success) {
+    var object = new ViewSidebar(option);
+    success();
+    return object;
+}
+
+function ViewSidebar(option) {
+    this.markControl = option.markControl;
+    this.list = option.list;
+    this.init();
+}
+
+ViewSidebar.prototype.init = function() {
+    var self = this;
+    this.container = getDom(this.container_dom, this.markControl).prependTo(this.markControl.container);
+    this.container.list = this.container.find('#view-list');
+    this.container.content = this.container.find('#view-content');
+
+    if (this.list.length > 0) {
+        for (var i = 0; i < this.list.length; i++) {
+            var option = this.list[i];
+            if (option.url == undefined || option.url.length == 0) {
+                continue;
+            }
+            this.container.list.append('<i style="cursor:pointer" data-url="' + option.url + '">' + option.title + '</i>');
+            this.container.list.append('&nbsp;&nbsp;')
+        }
+
+        this.container.list.find('i').click(function() {
+            self.container.list.find('i').removeClass('yellow');
+            $(this).addClass('yellow');
+            self.changeContent($(this).attr('data-url'));
+        });
+
+        this.container.list.find('i:first').trigger('click');
+
+        this.markControl.initMarkFunction();
+        this.toggleButton = getDom(this.toggle_button_dom, this.markControl).appendTo(this.markControl.container.assistant.functionList);
+        this.toggleButton.click(this, function(event) {
+            self.toggle(true);
+        });
+    }
+
+    this.container.find('#view-close-button').click(this, function(event) {
+        self.toggle(false);
+    });
+}
+
+ViewSidebar.prototype.toggle = function(enable) {
+    if (enable) {
+        this.markControl.trigger('view.sidebar.open');
+        this.container.removeClass('hide');
+    } else {
+        this.container.addClass('hide');
+        this.markControl.trigger('view.sidebar.close');
+    }
+}
+
+ViewSidebar.prototype.changeContent = function(url) {
+    this.container.content.empty();
+
+    var dom = $(this.content_dom);
+    dom[0].width = this.container.width();
+    dom[0].height = this.container.height() * 0.9;
+    dom.find('object')[0].width = this.container.width();
+    dom.find('object')[0].height = this.container.height() * 0.9;
+    dom.find('#object-src').val(url);
+    dom.find('object')[0].data = url;
+    this.container.content.append(dom);
+}
+
+ViewSidebar.prototype.toggle_button_dom = '<a href="#">侧边栏</a>';
+
+ViewSidebar.prototype.container_dom = '<div class="mark-sidebar span5 hide">\
+<div class="header"><p class="fl" id="view-list"></p>\
+<a href="##" id="view-close-button"><img src="{staticServer}/mark-new/images/hp-close.png"></a>\
+</div>\
+<div id="view-content"></div>\
+</div>';
+
+ViewSidebar.prototype.content_dom = '<object classid="clsid:CA8A9780-280D-11CF-A24D-444553540000" width="" height="" border="0">\
+<param name="_Version" value="65539">\
+<param name="_ExtentX" value="20108">\
+<param name="_ExtentY" value="10866">\
+<param name="_StockProps" value="0">\
+<param name="SRC" id="object-src" value="">\
+<object data="" type="application/pdf" width="" height=""></object>\
+</object>';

+ 88 - 0
stmms-web/src/main/webapp/static/mark-leader/js/modules/warning-info.js

@@ -0,0 +1,88 @@
+//提示警告信息
+var warning_info = function(option, success) {
+    var object = new WarningInfo(option);
+    success();
+    return object;
+}
+
+function WarningInfo(option) {
+    this.option = option;
+    this.markControl = option.markControl;
+    this.init();
+    var self = this;
+
+    this.markControl.on('task.get.success', this, function(event, context, eventObject) {
+        this.toggle(false);
+    });
+    this.markControl.on('task.get.none', this, function(event, context, message) {
+        this.toggle(true, message != undefined ? message : '评卷任务正在加载中', '', function() {
+            self.markControl.getTask();
+        });
+        if (context.status != undefined && context.status.totalCount == 0) {
+            this.container.button.hide();
+        }
+    });
+    this.markControl.on('task.get.finish', this, function(event, context, message) {
+        this.toggle(true, option.finishMessage != undefined ? option.finishMessage : '评卷任务已完成');
+        if (option.finishButtonUrl != undefined) {
+            this.container.button.attr('href', option.finishButtonUrl);
+            if (option.finishButtonText != undefined) {
+                this.container.button.html(option.finishButtonText);
+            }
+            this.container.button.show();
+        } else {
+            this.container.button.hide();
+        }
+    });
+    this.markControl.on('task.get.error', this, function(event, context, eventObject) {
+        this.toggle(true, option.errorMessage != undefined ? option.errorMessage : '领取评卷任务出错', '', function() {
+            self.markControl.getTask();
+        });
+    });
+    this.markControl.on('task.submit.success', this, function(event, context, eventObject) {
+        //this.toggle(false);
+    });
+    this.markControl.on('task.submit.error', this, function(event, context, eventObject) {
+        this.toggle(true, '网络异常,任务提交失败', '关闭');
+    });
+}
+
+WarningInfo.prototype.init = function() {
+    this.container = getDom(this.container_dom, this.markControl);
+    this.container.hide();
+    this.container.appendTo(this.markControl.container);
+
+    this.container.message = this.container.find('p');
+    this.container.button = this.container.find('a');
+}
+
+WarningInfo.prototype.toggle = function(enable, message, buttonText, callback) {
+    if (enable) {
+        var self = this;
+        this.container.message.html(message);
+
+        this.container.button.removeClass('disabled');
+        if (buttonText != undefined && buttonText != '') {
+            this.container.button.html(buttonText);
+        } else {
+            this.container.button.html('请点击重试');
+        }
+
+        this.container.button.unbind();
+        this.container.button.click(function() {
+            self.container.button.addClass('disabled');
+            self.toggle(false);
+            if (callback != undefined) {
+                callback();
+            }
+        });
+        this.container.button.show();
+
+        this.container.show();
+    } else {
+        this.container.hide();
+    }
+}
+
+WarningInfo.prototype.container_dom = '<div class="warning-popover"><p></p>\
+<a href="#" class="btn btn-large btn-primary text-c">请点击重试</a></div>';

+ 232 - 0
stmms-web/src/main/webapp/static/mark-leader/js/task-control.js

@@ -0,0 +1,232 @@
+function TaskControl(option) {
+    this.option = option;
+}
+
+//初始化任务控制器
+TaskControl.prototype.init = function() {
+    var message = '';
+    var option = this.option;
+    //任务提交地址必须有
+    if (option.submitUrl != undefined && option.submitUrl.length > 0) {
+        this.submitUrl = option.submitUrl;
+        if (option.mode == 'loop') {
+            if (option.getUrl != undefined && option.getUrl.length > 0) {
+                this.provider = new LoopTask(this, option.getUrl, option.historyUrl, option.statusUrl);
+            } else {
+                message = 'loop mode: option.getUrl is null';
+            }
+        } else if (option.mode == 'list') {
+            if (isArray(option.tasks) && option.tasks.length > 0) {
+                this.provider = new ListTask(this, option.tasks);
+            } else {
+                message = 'list mode: option.tasks is empty';
+            }
+        }
+    } else {
+        message = 'option.submitUrl is null';
+    }
+
+    if (this.provider == undefined) {
+        if (option.error != undefined && typeof(option.error) == 'function') {
+            option.error.call(this, message);
+        }
+    } else {
+        if (option.success != undefined && typeof(option.success) == 'function') {
+            option.success.call(this);
+        }
+    }
+}
+
+TaskControl.prototype.isFinish = function() {
+    return this.provider.isFinish();
+}
+
+//领取新的任务
+TaskControl.prototype.fetch = function(success, none, error) {
+    this.provider.getTask(function(task) {
+        this.currentTask = task;
+        success.call(this, task);
+    }, function(status) {
+        this.currentTask = undefined;
+        none.call(this, status);
+    }, function() {
+        this.currentTask = undefined;
+        error.call(this);
+    });
+}
+
+//提交任务处理结果
+TaskControl.prototype.submit = function(data, success, error) {
+    var taskControl = this;
+    $.ajax({
+    	url: this.submitUrl,
+        type: 'POST',
+        data: JSON.stringify(data),
+        dataType: "json",
+        contentType : 'application/json;charset=utf-8',
+        success: function(result) {
+            if (result.success) {
+                success.call(taskControl, taskControl.provider.onSubmit(result));
+            } else {
+                error.call(taskControl, result.message);
+            }
+        },
+        error: function() {
+            error.call(taskControl);
+        }
+    });
+}
+
+TaskControl.prototype.history = function(data, success, error) {
+    this.provider.getHistory(data, function(list) {
+        success.call(this, list);
+    }, function(message) {
+        error.call(this, message);
+    });
+}
+
+TaskControl.prototype.status = function(callback) {
+    this.provider.getStatus(callback);
+}
+
+function LoopTask(taskControl, getUrl, historyUrl, statusUrl) {
+    this.taskControl = taskControl;
+    this.getUrl = getUrl;
+    this.historyUrl = historyUrl;
+    this.statusUrl = statusUrl;
+    this.finish = false;
+}
+
+LoopTask.prototype.isFinish = function() {
+    return this.finish;
+}
+
+//遍历模式领取任务
+LoopTask.prototype.getTask = function(success, none, error) {
+    var getUrl = this.getUrl;
+    var taskControl = this.taskControl;
+    var self = this;
+    $.ajax({
+        url: getUrl,
+        type: 'POST',
+        success: function(task) {
+            if (task != undefined && task.exist === true) {
+                success.call(taskControl, task);
+            } else if (task != undefined && task.finish == true) {
+                self.finish = true;
+            } else {
+                none.call(taskControl, task);
+            }
+        },
+        error: function(request, message) {
+            error.call(taskControl, message);
+        }
+    });
+}
+
+//任务处理回调方法
+LoopTask.prototype.onSubmit = function(result) {
+    return result.status;
+}
+
+//获取评卷历史方法
+LoopTask.prototype.getHistory = function(data, success, error) {
+    var historyUrl = this.historyUrl;
+    var taskControl = this.taskControl;
+    if (historyUrl != undefined) {
+        $.ajax({
+            url: historyUrl,
+            type: 'POST',
+            data: data,
+            success: function(obj) {
+                success.call(taskControl, obj);
+            },
+            error: function(request, message) {
+                error.call(taskControl, message);
+            }
+        });
+    } else {
+        success.call(taskControl, []);
+    }
+}
+
+LoopTask.prototype.getStatus = function(callback) {
+    if (this.statusUrl != undefined) {
+        $.post(this.statusUrl, {}, function(status) {
+            if (status != undefined) {
+                callback(status);
+            }
+        });
+    }
+}
+
+
+//列表方式的任务引擎
+//用于预先指定需要评卷的任务的情况
+
+function ListTask(taskControl, taskList) {
+    this.taskControl = taskControl;
+    this.taskList = taskList;
+    this.totalCount = taskList.length;
+    this.getCount = 0;
+    this.markedCount = 0;
+}
+
+ListTask.prototype.isFinish = function() {
+    return this.markedCount == this.totalCount;
+}
+
+//列表模式领取任务
+ListTask.prototype.getTask = function(success, none, error) {
+    if (this.getCount < this.totalCount) {
+        var task = this.taskList[this.getCount];
+        task.index = this.getCount;
+        task.exist = true;
+
+        this.getCount++;
+        success.call(this.taskControl, task);
+    } else {
+        none.call(this.taskControl, {
+            exist: false,
+            message: '无评卷任务'
+        });
+    }
+}
+
+//任务处理回调方法
+ListTask.prototype.onSubmit = function(data) {
+    if (data.index == this.markedCount) {
+        this.markedCount++;
+    }
+    var status = {
+        markedCount: this.markedCount,
+        blockMarkedCount: this.markedCount,
+        blockTotalCount: this.totalCount
+    };
+    return status;
+}
+
+//获取评卷历史方法
+ListTask.prototype.getHistory = function(data, success, error) {
+    var start = this.markedCount - (data.pageNumber - 1) * data.pageSize - 1;
+    var end = start - data.pageSize;
+    var list = [];
+    for (var i = start; i > 0 && i > end; i--) {
+        var task = this.taskList[i];
+        task.previous = true;
+        list.push(task);
+    }
+    success.call(this.taskControl, list);
+}
+
+ListTask.prototype.getStatus = function(callback) {
+    var status = {
+        valid: true,
+        topCount: 0,
+        markedCount: this.markedCount,
+        blockMarkedCount: this.markedCount,
+        blockTotalCount: this.totalCount,
+        blockExceptionCount: 0
+    };
+    callback(status);
+}

+ 19 - 0
stmms-web/src/main/webapp/static/mark-leader/message-popover.html

@@ -0,0 +1,19 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>高校版阅卷系统</title>
+<link href="css/bootstrap.css" rel="stylesheet" type="text/css" />
+<link href="css/style.css" rel="stylesheet" type="text/css" />
+</head>
+
+<body>
+<div class="message-popover">
+  <div class="popover-header">
+    <p class="title">消息</p>
+  </div>
+<div class="popover-cont">111111111111111111111111111111111111111111111111111111……</div>
+<a href="#" class="btn btn-info dropdown-toggle btn-large text-c" data-loading-text="点击刷新">确 定</a>
+</div>
+</body>
+</html>

+ 19 - 0
stmms-web/src/main/webapp/static/mark-leader/message-popover2.html

@@ -0,0 +1,19 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>高校版阅卷系统</title>
+<link href="css/bootstrap.css" rel="stylesheet" type="text/css" />
+<link href="css/style.css" rel="stylesheet" type="text/css" />
+</head>
+
+<body>
+<div class="message-popover2">
+  <div class="popover-header">
+    <p class="title">消息</p>
+  </div>
+<div class="popover-cont">新建命题,在满分值一栏 输入a,其他项输入正确,点击保存一点击保存按钮约克郡布丁是一道可口的英国食品……</div>
+<a href="#" class="btn btn-info dropdown-toggle btn-large text-c" data-loading-text="点击刷新">确 定</a>
+</div>
+</body>
+</html>

+ 141 - 0
stmms-web/src/main/webapp/static/mark-leader/xiaozhushou.html

@@ -0,0 +1,141 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>高校版阅卷系统</title>
+<link href="css/bootstrap.css" rel="stylesheet" type="text/css" />
+<link href="css/style.css" rel="stylesheet" type="text/css" />
+</head>
+
+<body>
+<!--从这里开始是分值列表-->
+  <div class="score-board">
+    <div class="header">
+    <p class="fl">书面表达(完成句子)第五大题目</p>
+    <a class="header-close" href="#"><img src="images/close.png" /></a></div>
+    <div class="content">
+      <div class="sublist">
+        <p class="number">第一小题</p>
+        <p class="fraction">
+         <a href="#">0.0</a><a href="#">0.5</a><a href="#">1.0</a><a href="#">1.5</a><a href="#">2.0</a><a href="#">2.5</a><a href="#">3.0</a>
+        </p>
+      </div>
+      <div class="sublist">
+        <p class="number">第二小题</p>
+        <p class="fraction">
+         <a href="#">0.0</a><a href="#">0.5</a><a href="#">1.0</a><a href="#">1.5</a><a href="#">2.0</a><a href="#">2.5</a><a href="#">3.0</a>
+        </p>
+      </div>
+      <div class="sublist">
+        <p class="number">第三小题</p>
+        <p class="fraction">
+         <a href="#">0.0</a><a href="#">0.5</a><a class="active" href="#">1.0</a><a href="#">1.5</a><a href="#">2.0</a><a href="#">2.5</a><a href="#">0.0</a><a href="#">0.5</a><a href="#">1.0</a><a href="#">1.5</a>
+        </p>
+      </div>
+      <div class="sublist">
+        <p class="number">第四小题</p>
+        <p class="fraction">
+         <a href="#">0.0</a><a href="#">0.5</a><a href="#">1.0</a><a href="#">1.5</a><a href="#">2.0</a><a href="#">2.5</a><a href="#">3.0</a>
+        </p>
+      </div>
+      <div class="sublist">
+        <p class="number">第五小题小题</p>
+        <p class="fraction">
+         <a href="#">0.0</a><a href="#">0.5</a><a href="#">1.0</a><a href="#">1.5</a><a href="#">2.0</a><a href="#">2.5</a><a href="#">3.0</a>
+        </p>
+      </div>
+      <div class="sublist">
+        <p class="number">第六小题</p>
+        <p class="fraction">
+         <a href="#">0.0</a><a href="#">0.5</a><a href="#">1.0</a><a href="#">1.5</a><a href="#">2.0</a><a href="#">2.5</a><a href="#">3.0</a>
+        </p>
+      </div>
+      <div class="sublist">
+        <p class="number">第七小题</p>
+        <p class="fraction">
+         <a href="#">0.0</a><a href="#">0.5</a><a href="#">1.0</a><a href="#">1.5</a><a href="#">2.0</a><a href="#">2.5</a><a href="#">3.0</a>
+        </p>
+      </div>
+      <div class="sublist">
+        <p class="number">第八小题</p>
+        <p class="fraction">
+         <a href="#">0.0</a><a href="#">0.5</a><a href="#">1.0</a><a href="#">1.5</a><a href="#">2.0</a><a href="#">2.5</a><a href="#">3.0</a>
+        </p>
+      </div>
+      <div class="sublist">
+        <p class="number">第十小题</p>
+        <p class="fraction">
+         <a href="#">0.0</a><a href="#">0.5</a><a href="#">1.0</a><a href="#">1.5</a><a href="#">2.0</a><a href="#">2.5</a><a href="#">3.0</a>
+        </p>
+      </div>
+    </div>
+    <div class="footer">
+      <p class="font">总分:<i class="yellow">50分</i></p>
+      <a class="button" href="">提 交</a>
+    </div>
+  </div>
+<!--分值列表结束-->
+
+<!--从这里开始是小助手-->
+<!--<div class="popover bottom" style="left:322px; display: block;">
+   <div class="arrow"></div>
+   <h3 class="popover-title">评卷功能</h3>
+   <div class="popover-content">
+       <p class="popover-list">
+       <a  href="#">回评</a><a class="curr" href="#">样卷</a><a  href="#">标答</a><a  href="#">全卷</a>
+       </p>      
+   </div>
+   <h3 class="popover-title">问题卷</h3>
+   <div class="popover-content">
+       <p class="popover-list">
+       <a  href="#">试卷模糊</a><a class="curr" href="#">答错位置</a><a  href="#">无法判别</a>
+       </p>      
+   </div>
+   <h3 class="popover-title">密号提取</h3>
+       <div class="input-append">
+          <input class="span2" id="appendedInput" type="text" placeholder="密号提取">
+          <span class="add-on">搜 索</span>
+        </div>
+</div>-->
+<!--小助手结束-->
+
+<!--从这里开始是评卷详细信息-->
+<div class="mark-detail mark-detail-float">
+ <p class="m-close"><< 评卷详细信息</p>
+<!-- 下面是展开效果开始-->
+ <p class="m-open"><i>试卷总数:</i><i class="yellow">100份</i> <i>已评:</i><i class="yellow">50份</i> <i>未评:</i><i class="yellow">30份</i> <i>已评比例:</i><i class="yellow">20%</i></p>
+ <!--展示效果结束-->
+</div>
+<!--评卷详细信息结束-->
+
+<!--图片属性-->
+<div class="image-popover">
+<div class="image-control">
+ <span class="control-row">
+  <p class="title">图片切换</p>
+  <p class="content"><a href="#">1</a><a href="#">2</a><a class="curr" href="#">3</a><a href="#">4</a></p>
+ </span>
+ <span class="control-row">
+  <p class="title">图片控制</p>
+  <p class="content"><a class="curr" href="#">放大</a><a href="#">缩小</a><a href="#">1:1</a><a href="#">全屏</a></p>
+ </span>
+</div>
+ <a href="#" class="image-popover-close"><p>关</p><p>闭</p></a>
+ </div>
+<!--图片属性结束-->
+<!--<div class="warning-popover">
+<p>抱歉,当前没有评卷任务!</p>
+<a href="#" class="btn btn-large btn-primary text-c" data-loading-text="点击刷新">点击刷新</a>
+</div>-->
+
+<div class="message-popover">
+  <div class="popover-header">
+    <p class="title">消息</p>
+    <p class="image-close"><img src="images/images-close.png" /></p>
+  </div>
+<div class="popover-cont">新建命题,在满分值一栏 输入a,其他项输入正确,点击保存按钮约克郡布丁是一道可口的英国食品</div>
+<a href="#" class="btn btn-info dropdown-toggle btn-large text-c" data-loading-text="点击刷新">确 定</a>
+</div>
+
+</body>
+</html>

Niektoré súbory nie sú zobrazené, pretože je v týchto rozdielových dátach zmenené mnoho súborov