From ca0216c0c68cf81717dafd0eb83b0db5fccb1e15 Mon Sep 17 00:00:00 2001 From: Lucas Woltmann Date: Tue, 8 Jul 2014 20:14:37 +0200 Subject: [PATCH] first commit --- README.md | 112 + analysis.php | 175 + css/bootstrap.css | 4677 ++++++++++++++++++++++ css/ese-logo.png | Bin 0 -> 21922 bytes css/print.css | 67 + css/style.css | 76 + index.php | 102 + keyControlPanel.php | 287 ++ keyTable.php | 158 + libs/chartLib.php | 117 + libs/formLib.php | 263 ++ libs/keyLib.php | 166 + libs/loggingLib.php | 304 ++ libs/questionnaireLib.php | 77 + menu.php | 25 + patronGen.php | 75 + patronGenTut.php | 51 + questionnaires/student_questionnaire.txt | 62 + questionnaires/tutor_questionnaire.txt | 46 + tutorAnalysis.php | 175 + tutor_questionnaire.php | 100 + 21 files changed, 7115 insertions(+) create mode 100644 README.md create mode 100644 analysis.php create mode 100644 css/bootstrap.css create mode 100644 css/ese-logo.png create mode 100644 css/print.css create mode 100644 css/style.css create mode 100644 index.php create mode 100644 keyControlPanel.php create mode 100644 keyTable.php create mode 100644 libs/chartLib.php create mode 100644 libs/formLib.php create mode 100644 libs/keyLib.php create mode 100644 libs/loggingLib.php create mode 100644 libs/questionnaireLib.php create mode 100644 menu.php create mode 100644 patronGen.php create mode 100644 patronGenTut.php create mode 100644 questionnaires/student_questionnaire.txt create mode 100644 questionnaires/tutor_questionnaire.txt create mode 100644 tutorAnalysis.php create mode 100644 tutor_questionnaire.php diff --git a/README.md b/README.md new file mode 100644 index 0000000..0f2f12d --- /dev/null +++ b/README.md @@ -0,0 +1,112 @@ +#==============================================================================# +# ESE Evaluation ReadMe # +#==============================================================================# +# 1. General # +#------------------------------------------------------------------------------# +# The software was created for handling the ESE evaluation in a digitalized # +# way reduce the overhead of evaluating paper questionnaires by hand. Thus it # +# provides functions for defining questionnaires, saving filled in questionn- # +# aires in log files, reading them back, creating and handling access keys and # +# and provide a web interface from which all functions can be easily accessed # +#==============================================================================# +# 2. Functional principle # +#------------------------------------------------------------------------------# +# A key file (std. 'keys/keys.csv') contains a list of keys and their state. # +# The keys are used to authenticate a user that wants to fill in a new # +# questionnaire. # +# # +# Keys can have the following states: # +# - unissued => The key was created but has not jet been issued to a # +# student. # +# - issued => The key has been issued to a student and can be used to # +# fill in a questionnaire. # +# - activated => The key has been used to fill in a questionnaire and can # +# now be used to get the ESE cup. # +# - used => The key has been used to acquire an use cup. # +# # +# The people responsible for the ESE create a new list of keys by using the # +# page 'keyTable.php' and set the state of all keys that have been or will be # +# issued to student to 'issued'. # +# If a user has filled in its questionnaire by using the access code that has # +# been handed to him he may then go to a person that is authorized to hand out # +# ESE cup. Said person will then log into the system by using the page # +# 'keyControlPanel.php' and check if the state of the key is set to # +# 'activated'. If that is the case he hands the student his ESE cup and sets # +# the state of the corresponding key to 'used'. # +# The state system prevents users from filling in more than one questionnaire # +# or acquiring more than one ESE cup. # +#==============================================================================# +# 3. Preparing a new ESE Evaluation # +#------------------------------------------------------------------------------# +# a) First a new set of keys must be created by using the 'keyTable.php' page. # +# Select the amount of keys to be high enough to cover all students and # +# tutors. # +# b) Still in 'keyTable.php' set the state of all keys that will be issued to # +# students to 'issued'. # +# c) Open the file 'questionnaires/student_questionnaire.txt' and change the # +# list of questions for students to your liking. Do the same for the tutor # +# questions in the file 'questionnaires/tutor_questionnair.txt'. # +# You may also want to change the headline and title within the same files. # +# d) If you want to keep the old log data, you may also want to change the # +# of the log files for students and tutors in the file 'libs/loggingLib.php'# +# by changing the constants 'STUDENTLOGFILE' and 'TUTORLOGFILE' to the # +# desired values. Otherwise just delete the previous log files so that # +# blank ones will be created once the first questionnaire has been filled # +# in. # +#==============================================================================# +# 4. Checking if a student is authorised to acquire his cup # +#------------------------------------------------------------------------------# +# a) Access the page 'keyControlPanel.php' and enter the access code that was # +# provided to you by the people responsible for the ESE. # +# b) If the code was correct you may now enter the key code of the student in # +# question and check if its state is 'activated'. # +# c) Set the state of the key to used and hand a cup to the student. # +# d) You may are now back at step b) and may check a new code. # +#==============================================================================# +# 5. Analyse the results of the evaluation questionnaires # +#------------------------------------------------------------------------------# +# # +#==============================================================================# +# 6. Files # +#------------------------------------------------------------------------------# +# analysis.php > Analysis the provided log file and # +# displays its results. # +# keyControlPanel.php > Used to access the key file and check # +# or change the state of a key. Should # +# be used by everyone who is authorized # +# to hand out ESE cups. # +# keyTable.php > Graphical presentation of the key # +# file, can be used to generate new # +# keys or change the state of the # +# existing one. Should only be used by # +# a small number of responsible people. # +# student_questionnaire.php > The questionnaire page for students. # +# tutor_questionnaiere.php > The questionnaire page for tutors. # +# css/ > Contains all css style files. # +# bootstrap.css > Twitter bootstrap css file used for # +# the styling of the pages. # +# style.css > A custom style file for making a few # +# changes to the default bootstrap # +# style. # +# keys/ > Contains the key files. # +# keys.csv > The default key file if no other file # +# has been specified. # +# libs/ > Directory for all librarys. # +# formLib.php > Provides useful function for creating # +# the HTML forms that are used in the # +# questionnaires and several other # +# pages. # +# keyLib.php > Provides functions for creating, # +# checking and changing keys and # +# reading and writing key files. # +# logging.php > Provides functions for reading, # +# writing and appending log files. # +# questionnaireLib.php > Provides functions for reading # +# questionnaire files. # +# logs/ > Directory that contains all log files # +# that have been created. # +# questionnaires/ > Directory for all questionnaire files.# +# student_questionnaire.txt > Questionnaire file for students. # +# tutor_questionnaire.txt > Questionnaire file for tutors. # +#==============================================================================# + Patrick Reipschläger - 2013 \ No newline at end of file diff --git a/analysis.php b/analysis.php new file mode 100644 index 0000000..a652368 --- /dev/null +++ b/analysis.php @@ -0,0 +1,175 @@ + + + + + + ESE Evaluation Analyse + + + + +
+ 0) + { + CreateSectionHeader("Question Evaluation"); + CreateLegend(); + foreach ($questionData as $question) + { + CreateRowHeader(); + echo "
\n"; + // The question itself + echo "

" . $question[0]; + //average + echo "⌀" . + round( + ($question[1]+2*$question[2]+3*$question[3]+4*$question[4]+5*$question[5]) + /(array_sum(array_slice($question,1,5))), + 2) + . "\n"; + echo "

\n"; + echo "
\n"; + echo "
\n"; + echo "
\n"; + + $width = 800; + $height = 300; + + //find max of answers to set max of x-axis, max of y-axis is always seven, because there are six possibilities to answer + $values = $question; + array_shift($values); + $maxX = max($values)+1; + $maxY = 7; + + $img = CreateImage($width, $height); + + // the amount of answers for the different options and a nice group of bars + for ($i = 1; $i < 7; $i++) + { + echo "

" . $question[$i] . "

\n"; + $color = ImageColorAllocate($img, 255, 80+2*$question[$i], 0); + DrawBar($img, $question[$i], $maxX, $i+1, $maxY, $question[$i], $color); + } + + //finish image and save it + $caption = array("N/A","--","-", "0", "+", "++"); + DrawCoords($img, $maxX, $maxY, $caption); + + $file=str_replace("?", "", str_replace(" ", "", $question[0])); + + ImagePNG($img,"question".$file.".png"); + ImageDestroy($img); + + echo "
\n"; + echo "
\n"; + echo "
\n"; + echo "
\n"; + echo "
\n"; + echo " "; + echo "
\n"; + echo "
\n"; + } + } + // if there was any tutor Data in the log file, display it + if (count($tutorData) > 0) + { + CreateSectionHeader("Tutor Evaluation"); + CreateLegend(); + foreach ($tutorData as $tutorName => $tutor) + { + CreateRowHeader(); + echo "
\n"; + // the name of the tutor + echo "

" . $tutorName . "\n"; + + //average + echo "⌀" . + round( + ($tutor[0]+2*$tutor[1]+3*$tutor[2]+4*$tutor[3]+5*$tutor[4]) + /(array_sum($tutor)-$tutor[5]), 2) + . "\n"; + echo "

\n"; + + echo "
\n"; + echo "
\n"; + echo "
\n"; + + $width = 800; + $height = 300; + + //find max of answers to set max of x-axis, max of y-axis is always seven, because there are six possibilities to answer + $maxX = max($tutor)+1; + $maxY = 7; + + $img = CreateImage($width, $height); + + // the amount of answers for the different options and a picture + for ($i = 0; $i < 6; $i++) + { + echo "

" . $tutor[$i] . "

\n"; + $color = ImageColorAllocate($img, 255, 80+2*$tutor[$i], 0); + DrawBar($img, $tutor[$i], $maxX, $i+2, $maxY, $tutor[$i], $color); + } + + //finish image and save it + $caption = array("N/A","--","-", "0", "+", "++"); + DrawCoords($img, $maxX, $maxY, $caption); + + $file = str_replace(" ", "", $tutorName); + ImagePNG($img,"tutor".$file.".png"); + ImageDestroy($img); + + echo "
\n"; + echo "
\n"; + echo "
\n"; + echo "
\n"; + echo "
\n"; + echo " "; + echo "
\n"; + echo "\n"; + + } + } + // if there was any comment Data in the log file, display it + if (count($commentData) > 0) + { + CreateSectionHeader("Comments"); + foreach ($commentData as $comment) + // replace all new lines with html breaks to properly display multi-line comments + CreateParagraph(str_replace("\n", "
\n", $comment)); + } + ?> + + + \ No newline at end of file diff --git a/css/bootstrap.css b/css/bootstrap.css new file mode 100644 index 0000000..fdb7a4c --- /dev/null +++ b/css/bootstrap.css @@ -0,0 +1,4677 @@ +/*! + * Bootstrap v3.0.0 + * + * Copyright 2013 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 by @mdo and @fat. + */ + +/*! normalize.css v2.1.0 | MIT License | git.io/normalize */ + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section, +summary { + display: block; +} + +audio, +canvas, +video { + display: inline-block; +} + +audio:not([controls]) { + display: none; + height: 0; +} + +[hidden] { + display: none; +} + +html { + font-family: sans-serif; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +body { + margin: 0; +} + +a:focus { + outline: thin dotted; +} + +a:active, +a:hover { + outline: 0; +} + +h1 { + margin: 0.67em 0; + font-size: 2em; +} + +abbr[title] { + border-bottom: 1px dotted; +} + +b, +strong { + font-weight: bold; +} + +dfn { + font-style: italic; +} + +hr { + height: 0; + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +mark { + color: #000; + background: #ff0; +} + +code, +kbd, +pre, +samp { + font-family: monospace, serif; + font-size: 1em; +} + +pre { + white-space: pre-wrap; +} + +q { + quotes: "\201C" "\201D" "\2018" "\2019"; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +img { + border: 0; +} + +svg:not(:root) { + overflow: hidden; +} + +figure { + margin: 0; +} + +fieldset { + padding: 0.35em 0.625em 0.75em; + margin: 0 2px; + border: 1px solid #c0c0c0; +} + +legend { + padding: 0; + border: 0; +} + +button, +input, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: 100%; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + cursor: pointer; + -webkit-appearance: button; +} + +button[disabled], +html input[disabled] { + cursor: default; +} + +input[type="checkbox"], +input[type="radio"] { + padding: 0; + /*box-sizing: border-box;*/ +} + +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-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} + +textarea { + overflow: auto; + vertical-align: top; +} + +table { + border-collapse: collapse; + border-spacing: 0; +} + +@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: 2cm .5cm; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + .navbar { + display: none; + } + .table td, + .table th { + background-color: #fff !important; + } + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + .label { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} + +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +html { + font-size: 62.5%; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +body { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.428571429; + color: #333333; + background-color: #ffffff; +} + +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +a { + color: #428bca; + text-decoration: none; +} + +a:hover, +a:focus { + color: #2a6496; + text-decoration: underline; +} + +a:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +img { + vertical-align: middle; +} + +.img-responsive { + display: inline-block; + height: auto; + max-width: 100%; +} + +.img-rounded { + border-radius: 6px; +} + +.img-circle { + border-radius: 500px; +} + +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #eeeeee; +} + +p { + margin: 0 0 10px; +} + +.lead { + margin-bottom: 20px; + font-size: 16.099999999999998px; + font-weight: 200; + line-height: 1.4; +} + +@media (min-width: 768px) { + .lead { + font-size: 21px; + } +} + +small { + font-size: 85%; +} + +cite { + font-style: normal; +} + +.text-muted { + color: #999999; +} + +.text-primary { + color: #428bca; +} + +.text-warning { + color: #c09853; +} + +.text-danger { + color: #b94a48; +} + +.text-success { + color: #468847; +} + +.text-info { + color: #3a87ad; +} + +.text-left { + text-align: left; +} + +.text-right { + text-align: right; +} + +.text-center { + text-align: center; +} + +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-weight: 500; + line-height: 1.1; +} + +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small, +.h1 small, +.h2 small, +.h3 small, +.h4 small, +.h5 small, +.h6 small { + font-weight: normal; + line-height: 1; + color: #999999; +} + +h1, +h2, +h3 { + margin-top: 20px; + margin-bottom: 10px; +} + +h4, +h5, +h6 { + margin-top: 10px; + margin-bottom: 10px; +} + +h1, +.h1 { + font-size: 38px; +} + +h2, +.h2 { + font-size: 32px; +} + +h3, +.h3 { + font-size: 24px; +} + +h4, +.h4 { + font-size: 18px; +} + +h5, +.h5 { + font-size: 14px; +} + +h6, +.h6 { + font-size: 12px; +} + +h1 small, +.h1 small { + font-size: 24px; +} + +h2 small, +.h2 small { + font-size: 18px; +} + +h3 small, +.h3 small, +h4 small, +.h4 small { + font-size: 14px; +} + +.page-header { + padding-bottom: 9px; + margin: 40px 0 20px; + border-bottom: 1px solid #eeeeee; +} + +ul, +ol { + margin-top: 0; + margin-bottom: 10px; +} + +ul ul, +ol ul, +ul ol, +ol ol { + margin-bottom: 0; +} + +.list-unstyled { + padding-left: 0; + list-style: none; +} + +.list-inline { + padding-left: 0; + list-style: none; +} + +.list-inline > li { + display: inline-block; + padding-right: 5px; + padding-left: 5px; +} + +dl { + margin-bottom: 20px; +} + +dt, +dd { + line-height: 1.428571429; +} + +dt { + font-weight: bold; +} + +dd { + margin-left: 0; +} + +.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; +} + +.dl-horizontal dd:before, +.dl-horizontal dd:after { + display: table; + content: " "; +} + +.dl-horizontal dd:after { + clear: both; +} + +.dl-horizontal dd:before, +.dl-horizontal dd:after { + display: table; + content: " "; +} + +.dl-horizontal dd:after { + clear: both; +} + +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #999999; +} + +abbr.initialism { + font-size: 90%; + text-transform: uppercase; +} + +blockquote { + padding: 10px 20px; + margin: 0 0 20px; + border-left: 5px solid #eeeeee; +} + +blockquote p { + font-size: 17.5px; + font-weight: 300; + line-height: 1.25; +} + +blockquote p:last-child { + margin-bottom: 0; +} + +blockquote small { + display: block; + line-height: 1.428571429; + 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: 1.428571429; +} + +code, +pre { + font-family: Monaco, Menlo, Consolas, "Courier New", monospace; +} + +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + white-space: nowrap; + background-color: #f9f2f4; + border-radius: 4px; +} + +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.428571429; + color: #333333; + word-break: break-all; + word-wrap: break-word; + background-color: #f5f5f5; + border: 1px solid #cccccc; + border-radius: 4px; +} + +pre.prettyprint { + margin-bottom: 20px; +} + +pre code { + padding: 0; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border: 0; +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} + +.container { + margin-right: auto; + margin-left: auto; +} + +.container:before, +.container:after { + display: table; + content: " "; +} + +.container:after { + clear: both; +} + +.container:before, +.container:after { + display: table; + content: " "; +} + +.container:after { + clear: both; +} + +.row:before, +.row:after { + display: table; + content: " "; +} + +.row:after { + clear: both; +} + +.row:before, +.row:after { + display: table; + content: " "; +} + +.row:after { + clear: both; +} + +@media (min-width: 768px) { + .row { + margin-right: -15px; + margin-left: -15px; + } +} + +.row .row { + margin-right: -15px; + margin-left: -15px; +} + +.col-1, +.col-2, +.col-3, +.col-4, +.col-5, +.col-6, +.col-7, +.col-8, +.col-9, +.col-10, +.col-11, +.col-12, +.col-sm-1, +.col-sm-2, +.col-sm-3, +.col-sm-4, +.col-sm-5, +.col-sm-6, +.col-sm-7, +.col-sm-8, +.col-sm-9, +.col-sm-10, +.col-sm-11, +.col-sm-12, +.col-lg-1, +.col-lg-2, +.col-lg-3, +.col-lg-4, +.col-lg-5, +.col-lg-6, +.col-lg-7, +.col-lg-8, +.col-lg-9, +.col-lg-10, +.col-lg-11, +.col-lg-12 { + position: relative; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; +} + +.col-1, +.col-2, +.col-3, +.col-4, +.col-5, +.col-6, +.col-7, +.col-8, +.col-9, +.col-10, +.col-11, +.col-12 { + float: left; +} + +.col-1 { + width: 8.333333333333332%; +} + +.col-2 { + width: 16.666666666666664%; +} + +.col-3 { + width: 25%; +} + +.col-4 { + width: 33.33333333333333%; +} + +.col-5 { + width: 41.66666666666667%; +} + +.col-6 { + width: 50%; +} + +.col-7 { + width: 58.333333333333336%; +} + +.col-8 { + width: 66.66666666666666%; +} + +.col-9 { + width: 75%; +} + +.col-10 { + width: 83.33333333333334%; +} + +.col-11 { + width: 91.66666666666666%; +} + +.col-12 { + width: 100%; +} + +@media (min-width: 768px) { + .container { + max-width: 728px; + } + .col-sm-1, + .col-sm-2, + .col-sm-3, + .col-sm-4, + .col-sm-5, + .col-sm-6, + .col-sm-7, + .col-sm-8, + .col-sm-9, + .col-sm-10, + .col-sm-11, + .col-sm-12 { + float: left; + } + .col-sm-1 { + width: 8.333333333333332%; + } + .col-sm-2 { + width: 16.666666666666664%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-4 { + width: 33.33333333333333%; + } + .col-sm-5 { + width: 41.66666666666667%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-7 { + width: 58.333333333333336%; + } + .col-sm-8 { + width: 66.66666666666666%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-10 { + width: 83.33333333333334%; + } + .col-sm-11 { + width: 91.66666666666666%; + } + .col-sm-12 { + width: 100%; + } + .col-push-1 { + left: 8.333333333333332%; + } + .col-push-2 { + left: 16.666666666666664%; + } + .col-push-3 { + left: 25%; + } + .col-push-4 { + left: 33.33333333333333%; + } + .col-push-5 { + left: 41.66666666666667%; + } + .col-push-6 { + left: 50%; + } + .col-push-7 { + left: 58.333333333333336%; + } + .col-push-8 { + left: 66.66666666666666%; + } + .col-push-9 { + left: 75%; + } + .col-push-10 { + left: 83.33333333333334%; + } + .col-push-11 { + left: 91.66666666666666%; + } + .col-pull-1 { + right: 8.333333333333332%; + } + .col-pull-2 { + right: 16.666666666666664%; + } + .col-pull-3 { + right: 25%; + } + .col-pull-4 { + right: 33.33333333333333%; + } + .col-pull-5 { + right: 41.66666666666667%; + } + .col-pull-6 { + right: 50%; + } + .col-pull-7 { + right: 58.333333333333336%; + } + .col-pull-8 { + right: 66.66666666666666%; + } + .col-pull-9 { + right: 75%; + } + .col-pull-10 { + right: 83.33333333333334%; + } + .col-pull-11 { + right: 91.66666666666666%; + } +} + +@media (min-width: 992px) { + .container { + max-width: 940px; + } + .col-lg-1, + .col-lg-2, + .col-lg-3, + .col-lg-4, + .col-lg-5, + .col-lg-6, + .col-lg-7, + .col-lg-8, + .col-lg-9, + .col-lg-10, + .col-lg-11, + .col-lg-12 { + float: left; + } + .col-lg-1 { + width: 8.333333333333332%; + } + .col-lg-2 { + width: 16.666666666666664%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-4 { + width: 33.33333333333333%; + } + .col-lg-5 { + width: 41.66666666666667%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-7 { + width: 58.333333333333336%; + } + .col-lg-8 { + width: 66.66666666666666%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-10 { + width: 83.33333333333334%; + } + .col-lg-11 { + width: 91.66666666666666%; + } + .col-lg-12 { + width: 100%; + } + .col-offset-1 { + margin-left: 8.333333333333332%; + } + .col-offset-2 { + margin-left: 16.666666666666664%; + } + .col-offset-3 { + margin-left: 25%; + } + .col-offset-4 { + margin-left: 33.33333333333333%; + } + .col-offset-5 { + margin-left: 41.66666666666667%; + } + .col-offset-6 { + margin-left: 50%; + } + .col-offset-7 { + margin-left: 58.333333333333336%; + } + .col-offset-8 { + margin-left: 66.66666666666666%; + } + .col-offset-9 { + margin-left: 75%; + } + .col-offset-10 { + margin-left: 83.33333333333334%; + } + .col-offset-11 { + margin-left: 91.66666666666666%; + } +} + +@media (min-width: 1200px) { + .container { + max-width: 1170px; + } +} + +table { + max-width: 100%; + background-color: transparent; +} + +th { + text-align: left; +} + +.table { + width: 100%; + margin-bottom: 20px; +} + +.table thead > tr > th, +.table tbody > tr > th, +.table tfoot > tr > th, +.table thead > tr > td, +.table tbody > tr > td, +.table tfoot > tr > td { + padding: 8px; + line-height: 1.428571429; + vertical-align: top; + border-top: 1px solid #dddddd; +} + +.table thead > tr > th { + vertical-align: bottom; +} + +.table caption + thead tr:first-child th, +.table colgroup + thead tr:first-child th, +.table thead:first-child tr:first-child th, +.table caption + thead tr:first-child td, +.table colgroup + thead tr:first-child td, +.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 thead > tr > th, +.table-condensed tbody > tr > th, +.table-condensed tfoot > tr > th, +.table-condensed thead > tr > td, +.table-condensed tbody > tr > td, +.table-condensed tfoot > tr > td { + padding: 5px; +} + +.table-bordered { + border: 1px solid #dddddd; +} + +.table-bordered > thead > tr > th, +.table-bordered > tbody > tr > th, +.table-bordered > tfoot > tr > th, +.table-bordered > thead > tr > td, +.table-bordered > tbody > tr > td, +.table-bordered > tfoot > tr > td { + border: 1px solid #dddddd; +} + +.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: #f5f5f5; +} + +table col[class^="col-"] { + display: table-column; + float: none; +} + +table td[class^="col-"], +table th[class^="col-"] { + display: table-cell; + float: none; +} + +.table > thead > tr > td.active, +.table > tbody > tr > td.active, +.table > tfoot > tr > td.active, +.table > thead > tr > th.active, +.table > tbody > tr > th.active, +.table > tfoot > tr > th.active, +.table > thead > tr.active > td, +.table > tbody > tr.active > td, +.table > tfoot > tr.active > td, +.table > thead > tr.active > th, +.table > tbody > tr.active > th, +.table > tfoot > tr.active > th { + background-color: #f5f5f5; +} + +.table > thead > tr > td.success, +.table > tbody > tr > td.success, +.table > tfoot > tr > td.success, +.table > thead > tr > th.success, +.table > tbody > tr > th.success, +.table > tfoot > tr > th.success, +.table > thead > tr.success > td, +.table > tbody > tr.success > td, +.table > tfoot > tr.success > td, +.table > thead > tr.success > th, +.table > tbody > tr.success > th, +.table > tfoot > tr.success > th { + background-color: #dff0d8; + border-color: #d6e9c6; +} + +.table > thead > tr > td.danger, +.table > tbody > tr > td.danger, +.table > tfoot > tr > td.danger, +.table > thead > tr > th.danger, +.table > tbody > tr > th.danger, +.table > tfoot > tr > th.danger, +.table > thead > tr.danger > td, +.table > tbody > tr.danger > td, +.table > tfoot > tr.danger > td, +.table > thead > tr.danger > th, +.table > tbody > tr.danger > th, +.table > tfoot > tr.danger > th { + background-color: #f2dede; + border-color: #eed3d7; +} + +.table > thead > tr > td.warning, +.table > tbody > tr > td.warning, +.table > tfoot > tr > td.warning, +.table > thead > tr > th.warning, +.table > tbody > tr > th.warning, +.table > tfoot > tr > th.warning, +.table > thead > tr.warning > td, +.table > tbody > tr.warning > td, +.table > tfoot > tr.warning > td, +.table > thead > tr.warning > th, +.table > tbody > tr.warning > th, +.table > tfoot > tr.warning > th { + background-color: #fcf8e3; + border-color: #fbeed5; +} + +.table-hover > tbody > tr > td.success:hover, +.table-hover > tbody > tr > th.success:hover, +.table-hover > tbody > tr.success:hover > td { + background-color: #d0e9c6; + border-color: #c9e2b3; +} + +.table-hover > tbody > tr > td.danger:hover, +.table-hover > tbody > tr > th.danger:hover, +.table-hover > tbody > tr.danger:hover > td { + background-color: #ebcccc; + border-color: #e6c1c7; +} + +.table-hover > tbody > tr > td.warning:hover, +.table-hover > tbody > tr > th.warning:hover, +.table-hover > tbody > tr.warning:hover > td { + background-color: #faf2cc; + border-color: #f8e5be; +} + +fieldset { + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: inherit; + color: #333333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} + +label { + display: inline-block; + margin-bottom: 5px; + font-weight: bold; +} + +input[type="search"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + /* IE8-9 */ + + line-height: normal; +} + +input[type="file"] { + display: block; +} + +select[multiple], +select[size] { + height: auto; +} + +select optgroup { + font-family: inherit; + font-size: inherit; + font-style: inherit; +} + +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;*/ +} + +input[type="number"]::-webkit-outer-spin-button, +input[type="number"]::-webkit-inner-spin-button { + height: auto; +} + +.form-control:-moz-placeholder { + color: #999999; +} + +.form-control::-moz-placeholder { + color: #999999; +} + +.form-control:-ms-input-placeholder { + color: #999999; +} + +.form-control::-webkit-input-placeholder { + color: #999999; +} + +.form-control { + display: block; + width: 100%; + height: 38px; + padding: 8px 12px; + font-size: 14px; + line-height: 1.428571429; + color: #555555; + vertical-align: middle; + background-color: #ffffff; + border: 1px solid #cccccc; + border-radius: 4px; + -webkit-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-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; + transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; +} + +.form-control:focus { + border-color: rgba(82, 168, 236, 0.8); + outline: 0; + -webkit-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); +} + +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + cursor: not-allowed; + background-color: #eeeeee; +} + +textarea.form-control { + height: auto; +} + +.form-group { + margin-bottom: 15px; +} + +.radio, +.checkbox { + display: block; + min-height: 20px; + padding-left: 20px; + margin-top: 10px; + margin-bottom: 10px; + vertical-align: middle; +} + +.radio label, +.checkbox label { + display: inline; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} + +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + float: left; + margin-left: -20px; +} + +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; +} + +.radio-inline, +.checkbox-inline { + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + vertical-align: middle; + cursor: pointer; +} + +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; +} + +.form-control.input-large { + height: 56px; + padding: 14px 16px; + font-size: 18px; + border-radius: 6px; +} + +.form-control.input-small { + height: 30px; + padding: 5px 10px; + font-size: 12px; + border-radius: 3px; +} + +select.input-large { + height: 56px; + line-height: 56px; +} + +select.input-small { + height: 30px; + line-height: 30px; +} + +.has-warning .help-block, +.has-warning .control-label { + color: #c09853; +} + +.has-warning .form-control { + padding-right: 32px; + border-color: #c09853; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.has-warning .form-control:focus { + border-color: #a47e3c; + -webkit-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; +} + +.has-warning .input-group-addon { + color: #c09853; + background-color: #fcf8e3; + border-color: #c09853; +} + +.has-error .help-block, +.has-error .control-label { + color: #b94a48; +} + +.has-error .form-control { + padding-right: 32px; + border-color: #b94a48; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.has-error .form-control:focus { + border-color: #953b39; + -webkit-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; +} + +.has-error .input-group-addon { + color: #b94a48; + background-color: #f2dede; + border-color: #b94a48; +} + +.has-success .help-block, +.has-success .control-label { + color: #468847; +} + +.has-success .form-control { + padding-right: 32px; + border-color: #468847; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.has-success .form-control:focus { + border-color: #356635; + -webkit-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; +} + +.has-success .input-group-addon { + color: #468847; + background-color: #dff0d8; + border-color: #468847; +} + +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #737373; +} + +.input-group { + display: table; + border-collapse: separate; +} + +.input-group.col { + float: none; + padding-right: 0; + padding-left: 0; +} + +.input-group .form-control { + width: 100%; + margin-bottom: 0; +} + +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; +} + +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; +} + +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} + +.input-group-addon { + padding: 8px 12px; + font-size: 14px; + font-weight: normal; + line-height: 1.428571429; + text-align: center; + background-color: #eeeeee; + border: 1px solid #cccccc; + border-radius: 4px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.input-group-addon.input-small { + padding: 5px 10px; + font-size: 12px; + border-radius: 3px; +} + +.input-group-addon.input-large { + padding: 14px 16px; + font-size: 18px; + border-radius: 6px; +} + +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.input-group-addon:first-child { + border-right: 0; +} + +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} + +.input-group-addon:last-child { + border-left: 0; +} + +.input-group-btn { + position: relative; + white-space: nowrap; +} + +.input-group-btn > .btn { + position: relative; +} + +.input-group-btn > .btn + .btn { + margin-left: -4px; +} + +.input-group-btn > .btn:hover, +.input-group-btn > .btn:active { + z-index: 2; +} + +.form-inline .form-control, +.form-inline .radio, +.form-inline .checkbox { + display: inline-block; +} + +.form-inline .radio, +.form-inline .checkbox { + margin-top: 0; + margin-bottom: 0; +} + +.form-horizontal .control-label { + padding-top: 6px; +} + +.form-horizontal .form-group:before, +.form-horizontal .form-group:after { + display: table; + content: " "; +} + +.form-horizontal .form-group:after { + clear: both; +} + +.form-horizontal .form-group:before, +.form-horizontal .form-group:after { + display: table; + content: " "; +} + +.form-horizontal .form-group:after { + clear: both; +} + +@media (min-width: 768px) { + .form-horizontal .form-group { + margin-right: -15px; + margin-left: -15px; + } +} + +.form-horizontal .form-group .row { + margin-right: -15px; + margin-left: -15px; +} + +@media (min-width: 768px) { + .form-horizontal .control-label { + text-align: right; + } +} + +.btn { + display: inline-block; + padding: 8px 12px; + margin-bottom: 0; + font-size: 14px; + font-weight: 500; + line-height: 1.428571429; + text-align: center; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + border: 1px solid transparent; + border-radius: 4px; +} + +.btn:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +.btn:hover, +.btn:focus { + color: #ffffff; + text-decoration: none; +} + +.btn:active, +.btn.active { + outline: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} + +.btn.disabled, +.btn[disabled], +fieldset[disabled] .btn { + pointer-events: none; + cursor: default; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; +} + +.btn-default { + color: #ffffff; + background-color: #474949; + border-color: #474949; +} + +.btn-default:hover, +.btn-default:focus, +.btn-default:active, +.btn-default.active { + background-color: #3a3c3c; + border-color: #2e2f2f; +} + +.btn-default.disabled, +.btn-default[disabled], +fieldset[disabled] .btn-default, +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled:active, +.btn-default[disabled]:active, +fieldset[disabled] .btn-default:active, +.btn-default.disabled.active, +.btn-default[disabled].active, +fieldset[disabled] .btn-default.active { + background-color: #474949; + border-color: #474949; +} + +.btn-primary { + color: #ffffff; + background-color: #428bca; + border-color: #428bca; +} + +.btn-primary:hover, +.btn-primary:focus, +.btn-primary:active, +.btn-primary.active { + background-color: #357ebd; + border-color: #3071a9; +} + +.btn-primary.disabled, +.btn-primary[disabled], +fieldset[disabled] .btn-primary, +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled:active, +.btn-primary[disabled]:active, +fieldset[disabled] .btn-primary:active, +.btn-primary.disabled.active, +.btn-primary[disabled].active, +fieldset[disabled] .btn-primary.active { + background-color: #428bca; + border-color: #428bca; +} + +.btn-warning { + color: #ffffff; + background-color: #f0ad4e; + border-color: #f0ad4e; +} + +.btn-warning:hover, +.btn-warning:focus, +.btn-warning:active, +.btn-warning.active { + background-color: #eea236; + border-color: #ec971f; +} + +.btn-warning.disabled, +.btn-warning[disabled], +fieldset[disabled] .btn-warning, +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled:active, +.btn-warning[disabled]:active, +fieldset[disabled] .btn-warning:active, +.btn-warning.disabled.active, +.btn-warning[disabled].active, +fieldset[disabled] .btn-warning.active { + background-color: #f0ad4e; + border-color: #f0ad4e; +} + +.btn-danger { + color: #ffffff; + background-color: #d9534f; + border-color: #d9534f; +} + +.btn-danger:hover, +.btn-danger:focus, +.btn-danger:active, +.btn-danger.active { + background-color: #d43f3a; + border-color: #c9302c; +} + +.btn-danger.disabled, +.btn-danger[disabled], +fieldset[disabled] .btn-danger, +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled:active, +.btn-danger[disabled]:active, +fieldset[disabled] .btn-danger:active, +.btn-danger.disabled.active, +.btn-danger[disabled].active, +fieldset[disabled] .btn-danger.active { + background-color: #d9534f; + border-color: #d9534f; +} + +.btn-success { + color: #ffffff; + background-color: #5cb85c; + border-color: #5cb85c; +} + +.btn-success:hover, +.btn-success:focus, +.btn-success:active, +.btn-success.active { + background-color: #4cae4c; + border-color: #449d44; +} + +.btn-success.disabled, +.btn-success[disabled], +fieldset[disabled] .btn-success, +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled:active, +.btn-success[disabled]:active, +fieldset[disabled] .btn-success:active, +.btn-success.disabled.active, +.btn-success[disabled].active, +fieldset[disabled] .btn-success.active { + background-color: #5cb85c; + border-color: #5cb85c; +} + +.btn-info { + color: #ffffff; + background-color: #5bc0de; + border-color: #5bc0de; +} + +.btn-info:hover, +.btn-info:focus, +.btn-info:active, +.btn-info.active { + background-color: #46b8da; + border-color: #31b0d5; +} + +.btn-info.disabled, +.btn-info[disabled], +fieldset[disabled] .btn-info, +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled:active, +.btn-info[disabled]:active, +fieldset[disabled] .btn-info:active, +.btn-info.disabled.active, +.btn-info[disabled].active, +fieldset[disabled] .btn-info.active { + background-color: #5bc0de; + border-color: #5bc0de; +} + +.btn-link { + font-weight: normal; + color: #428bca; + cursor: pointer; + border-radius: 0; +} + +.btn-link, +.btn-link:active, +.btn-link[disabled], +fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} + +.btn-link, +.btn-link:hover, +.btn-link:focus, +.btn-link:active { + border-color: transparent; +} + +.btn-link:hover, +.btn-link:focus { + color: #2a6496; + text-decoration: underline; + background-color: transparent; +} + +.btn-link[disabled]:hover, +fieldset[disabled] .btn-link:hover, +.btn-link[disabled]:focus, +fieldset[disabled] .btn-link:focus { + color: #333333; + text-decoration: none; +} + +.btn-large { + padding: 14px 16px; + font-size: 18px; + border-radius: 6px; +} + +.btn-small { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} + +.btn-block { + display: block; + width: 100%; + padding-right: 0; + padding-left: 0; +} + +.btn-block + .btn-block { + margin-top: 5px; +} + +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} + +.fade { + opacity: 0; + -webkit-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; +} + +.fade.in { + opacity: 1; +} + +.collapse { + display: none; +} + +.collapse.in { + display: block; +} + +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition: height 0.35s ease; + transition: height 0.35s ease; +} + +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px solid #000000; + border-right: 4px solid transparent; + border-left: 4px solid transparent; + content: ""; +} + +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + list-style: none; + background-color: #ffffff; + border: 1px solid #cccccc; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + background-clip: padding-box; +} + +.dropdown-menu.pull-right { + right: 0; + left: auto; +} + +.dropdown-menu .divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} + +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.428571429; + color: #333333; + white-space: nowrap; +} + +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + color: #ffffff; + text-decoration: none; + background-color: #357ebd; + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#357ebd)); + background-image: -webkit-linear-gradient(top, #428bca, 0%, #357ebd, 100%); + background-image: -moz-linear-gradient(top, #428bca 0%, #357ebd 100%); + background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); +} + +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #ffffff; + text-decoration: none; + background-color: #357ebd; + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#357ebd)); + background-image: -webkit-linear-gradient(top, #428bca, 0%, #357ebd, 100%); + background-image: -moz-linear-gradient(top, #428bca 0%, #357ebd 100%); + background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); + background-repeat: repeat-x; + outline: 0; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', 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: not-allowed; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.open > .dropdown-menu { + display: block; +} + +.open > a { + outline: 0; +} + +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.428571429; + color: #999999; +} + +.dropdown-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 990; +} + +.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; +} + +.list-group { + padding-left: 0; + margin-bottom: 20px; + background-color: #ffffff; +} + +.list-group-item { + position: relative; + display: block; + padding: 10px 30px 10px 15px; + margin-bottom: -1px; + border: 1px solid #dddddd; +} + +.list-group-item:first-child { + border-top-right-radius: 4px; + border-top-left-radius: 4px; +} + +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +.list-group-item > .badge { + float: right; + margin-right: -15px; +} + +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} + +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} + +a.list-group-item .list-group-item-heading { + color: #333333; +} + +a.list-group-item .list-group-item-text { + color: #555555; +} + +a.list-group-item:hover, +a.list-group-item:focus { + text-decoration: none; + background-color: #f5f5f5; +} + +a.list-group-item.active { + z-index: 2; + color: #ffffff; + background-color: #428bca; + border-color: #428bca; +} + +a.list-group-item.active .list-group-item-heading { + color: inherit; +} + +a.list-group-item.active .list-group-item-text { + color: #e1edf7; +} + +.panel { + padding: 15px; + margin-bottom: 20px; + background-color: #ffffff; + border: 1px solid #dddddd; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); +} + +.panel-heading { + padding: 10px 15px; + margin: -15px -15px 15px; + background-color: #f5f5f5; + border-bottom: 1px solid #dddddd; + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} + +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 17.5px; + font-weight: 500; +} + +.panel-footer { + padding: 10px 15px; + margin: 15px -15px -15px; + background-color: #f5f5f5; + border-top: 1px solid #dddddd; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} + +.panel-primary { + border-color: #428bca; +} + +.panel-primary .panel-heading { + color: #ffffff; + background-color: #428bca; + border-color: #428bca; +} + +.panel-success { + border-color: #d6e9c6; +} + +.panel-success .panel-heading { + color: #468847; + background-color: #dff0d8; + border-color: #d6e9c6; +} + +.panel-warning { + border-color: #fbeed5; +} + +.panel-warning .panel-heading { + color: #c09853; + background-color: #fcf8e3; + border-color: #fbeed5; +} + +.panel-danger { + border-color: #eed3d7; +} + +.panel-danger .panel-heading { + color: #b94a48; + background-color: #f2dede; + border-color: #eed3d7; +} + +.panel-info { + border-color: #bce8f1; +} + +.panel-info .panel-heading { + color: #3a87ad; + background-color: #d9edf7; + border-color: #bce8f1; +} + +.list-group-flush { + margin: 15px -15px -15px; +} + +.list-group-flush .list-group-item { + border-width: 1px 0; +} + +.list-group-flush .list-group-item:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +.list-group-flush .list-group-item:last-child { + border-bottom: 0; +} + +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 4px; + -webkit-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; + border-radius: 6px; +} + +.well-small { + padding: 9px; + border-radius: 3px; +} + +.close { + float: right; + font-size: 21px; + font-weight: bold; + line-height: 1; + 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.5; + filter: alpha(opacity=50); +} + +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} + +.nav { + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.nav:before, +.nav:after { + display: table; + content: " "; +} + +.nav:after { + clear: both; +} + +.nav:before, +.nav:after { + display: table; + content: " "; +} + +.nav:after { + clear: both; +} + +.nav > li { + position: relative; + display: block; +} + +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px; +} + +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} + +.nav > li.disabled > a { + color: #999999; +} + +.nav > li.disabled > a:hover, +.nav > li.disabled > a:focus { + color: #999999; + text-decoration: none; + cursor: not-allowed; + background-color: transparent; +} + +.nav > li + .nav-header { + margin-top: 9px; +} + +.nav.open > a, +.nav.open > a:hover, +.nav.open > a:focus { + color: #ffffff; + background-color: #428bca; + border-color: #428bca; +} + +.nav.open > a .caret, +.nav.open > a:hover .caret, +.nav.open > a:focus .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.nav > .pull-right { + float: right; +} + +.nav .nav-divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} + +.nav-tabs { + border-bottom: 1px solid #dddddd; +} + +.nav-tabs > li { + float: left; + margin-bottom: -1px; +} + +.nav-tabs > li > a { + margin-right: 2px; + line-height: 1.428571429; + border: 1px solid transparent; + border-radius: 4px 4px 0 0; +} + +.nav-tabs > li > a:hover { + border-color: #eeeeee; +} + +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover, +.nav-tabs > li.active > a:focus { + color: #555555; + cursor: default; + background-color: #ffffff; + border: 1px solid #dddddd; + border-bottom-color: transparent; +} + +.nav-tabs.nav-justified { + width: 100%; + border-bottom: 0; +} + +.nav-tabs.nav-justified > li { + display: table-cell; + float: none; + width: 1%; +} + +.nav-tabs.nav-justified > li > a { + text-align: center; +} + +.nav-tabs.nav-justified > li > a { + margin-right: 0; + border-bottom: 1px solid #dddddd; +} + +.nav-tabs.nav-justified > .active > a { + border-bottom-color: #ffffff; +} + +.nav-pills > li { + float: left; +} + +.nav-pills > li > a { + border-radius: 5px; +} + +.nav-pills > li + li { + margin-left: 2px; +} + +.nav-pills > li.active > a, +.nav-pills > li.active > a:hover, +.nav-pills > li.active > a:focus { + color: #ffffff; + background-color: #428bca; +} + +.nav-stacked > li { + float: none; +} + +.nav-stacked > li + li > a { + margin-top: 2px; + margin-left: 0; +} + +.nav-justified { + width: 100%; +} + +.nav-justified > li { + display: table-cell; + float: none; + width: 1%; +} + +.nav-justified > li > a { + text-align: center; +} + +.nav-tabs-justified { + border-bottom: 0; +} + +.nav-tabs-justified > li > a { + margin-right: 0; + border-bottom: 1px solid #dddddd; +} + +.nav-tabs-justified > .active > a { + border-bottom-color: #ffffff; +} + +.tabbable:before, +.tabbable:after { + display: table; + content: " "; +} + +.tabbable:after { + clear: both; +} + +.tabbable:before, +.tabbable:after { + display: table; + content: " "; +} + +.tabbable:after { + clear: both; +} + +.tab-content > .tab-pane, +.pill-content > .pill-pane { + display: none; +} + +.tab-content > .active, +.pill-content > .active { + display: block; +} + +.nav .caret { + border-top-color: #428bca; + border-bottom-color: #428bca; +} + +.nav a:hover .caret { + border-top-color: #2a6496; + border-bottom-color: #2a6496; +} + +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +.navbar { + position: relative; + min-height: 50px; + padding-right: 15px; + padding-left: 15px; + margin-bottom: 20px; + background-color: #eeeeee; + border-radius: 4px; +} + +.navbar:before, +.navbar:after { + display: table; + content: " "; +} + +.navbar:after { + clear: both; +} + +.navbar:before, +.navbar:after { + display: table; + content: " "; +} + +.navbar:after { + clear: both; +} + +.navbar-nav { + margin-top: 10px; + margin-bottom: 15px; +} + +.navbar-nav > li > a { + padding-top: 15px; + padding-bottom: 15px; + line-height: 20px; + color: #777777; + border-radius: 4px; +} + +.navbar-nav > li > a:hover, +.navbar-nav > li > a:focus { + color: #333333; + background-color: transparent; +} + +.navbar-nav > .active > a, +.navbar-nav > .active > a:hover, +.navbar-nav > .active > a:focus { + color: #555555; + background-color: #d5d5d5; +} + +.navbar-nav > .disabled > a, +.navbar-nav > .disabled > a:hover, +.navbar-nav > .disabled > a:focus { + color: #cccccc; + background-color: transparent; +} + +.navbar-nav.pull-right { + width: 100%; +} + +.navbar-static-top { + border-radius: 0; +} + +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; + border-radius: 0; +} + +.navbar-fixed-top { + top: 0; +} + +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; +} + +.navbar-brand { + display: block; + max-width: 200px; + padding: 15px 15px; + margin-right: auto; + margin-left: auto; + font-size: 18px; + font-weight: 500; + line-height: 20px; + color: #777777; + text-align: center; +} + +.navbar-brand:hover, +.navbar-brand:focus { + color: #5e5e5e; + text-decoration: none; + background-color: transparent; +} + +.navbar-toggle { + position: absolute; + top: 9px; + right: 10px; + width: 48px; + height: 32px; + padding: 8px 12px; + background-color: transparent; + border: 1px solid #dddddd; + border-radius: 4px; +} + +.navbar-toggle:hover, +.navbar-toggle:focus { + background-color: #dddddd; +} + +.navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + background-color: #cccccc; + border-radius: 1px; +} + +.navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px; +} + +.navbar-form { + margin-top: 6px; + margin-bottom: 6px; +} + +.navbar-form .form-control, +.navbar-form .radio, +.navbar-form .checkbox { + display: inline-block; +} + +.navbar-form .radio, +.navbar-form .checkbox { + margin-top: 0; + margin-bottom: 0; +} + +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.navbar-nav > .dropdown > a:hover .caret, +.navbar-nav > .dropdown > a:focus .caret { + border-top-color: #333333; + border-bottom-color: #333333; +} + +.navbar-nav > .open > a, +.navbar-nav > .open > a:hover, +.navbar-nav > .open > a:focus { + color: #555555; + background-color: #d5d5d5; +} + +.navbar-nav > .open > a .caret, +.navbar-nav > .open > a:hover .caret, +.navbar-nav > .open > a:focus .caret { + border-top-color: #555555; + border-bottom-color: #555555; +} + +.navbar-nav > .dropdown > a .caret { + border-top-color: #777777; + border-bottom-color: #777777; +} + +.navbar-nav.pull-right > li > .dropdown-menu, +.navbar-nav > li > .dropdown-menu.pull-right { + right: 0; + left: auto; +} + +.navbar-inverse { + background-color: #222222; +} + +.navbar-inverse .navbar-brand { + color: #999999; +} + +.navbar-inverse .navbar-brand:hover, +.navbar-inverse .navbar-brand:focus { + color: #ffffff; + background-color: transparent; +} + +.navbar-inverse .navbar-text { + color: #999999; +} + +.navbar-inverse .navbar-nav > li > a { + color: #999999; +} + +.navbar-inverse .navbar-nav > li > a:hover, +.navbar-inverse .navbar-nav > li > a:focus { + color: #ffffff; + background-color: transparent; +} + +.navbar-inverse .navbar-nav > .active > a, +.navbar-inverse .navbar-nav > .active > a:hover, +.navbar-inverse .navbar-nav > .active > a:focus { + color: #ffffff; + background-color: #080808; +} + +.navbar-inverse .navbar-nav > .disabled > a, +.navbar-inverse .navbar-nav > .disabled > a:hover, +.navbar-inverse .navbar-nav > .disabled > a:focus { + color: #444444; + background-color: transparent; +} + +.navbar-inverse .navbar-toggle { + border-color: #333333; +} + +.navbar-inverse .navbar-toggle:hover, +.navbar-inverse .navbar-toggle:focus { + background-color: #333333; +} + +.navbar-inverse .navbar-toggle .icon-bar { + background-color: #ffffff; +} + +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .open > a:hover, +.navbar-inverse .navbar-nav > .open > a:focus { + color: #ffffff; + background-color: #080808; +} + +.navbar-inverse .navbar-nav > .dropdown > a:hover .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.navbar-inverse .navbar-nav > .dropdown > a .caret { + border-top-color: #999999; + border-bottom-color: #999999; +} + +.navbar-inverse .navbar-nav > .open > a .caret, +.navbar-inverse .navbar-nav > .open > a:hover .caret, +.navbar-inverse .navbar-nav > .open > a:focus .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +@media screen and (min-width: 768px) { + .navbar-brand { + float: left; + margin-right: 5px; + margin-left: -15px; + } + .navbar-nav { + float: left; + margin-top: 0; + margin-bottom: 0; + } + .navbar-nav > li { + float: left; + } + .navbar-nav > li > a { + border-radius: 0; + } + .navbar-nav.pull-right { + float: right; + width: auto; + } + .navbar-toggle { + position: relative; + top: auto; + left: auto; + display: none; + } + .nav-collapse.collapse { + display: block !important; + height: auto !important; + overflow: visible !important; + } +} + +.navbar-btn { + margin-top: 6px; +} + +.navbar-text { + margin-top: 15px; + margin-bottom: 15px; +} + +.navbar-link { + color: #777777; +} + +.navbar-link:hover { + color: #333333; +} + +.navbar-inverse .navbar-link { + color: #999999; +} + +.navbar-inverse .navbar-link:hover { + color: #ffffff; +} + +.btn .caret { + border-top-color: #ffffff; +} + +.dropup .btn .caret { + border-bottom-color: #ffffff; +} + +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} + +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; +} + +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover, +.btn-group > .btn:active, +.btn-group-vertical > .btn:active { + z-index: 2; +} + +.btn-group .btn + .btn { + margin-left: -1px; +} + +.btn-toolbar:before, +.btn-toolbar:after { + display: table; + content: " "; +} + +.btn-toolbar:after { + clear: both; +} + +.btn-toolbar:before, +.btn-toolbar:after { + display: table; + content: " "; +} + +.btn-toolbar:after { + clear: both; +} + +.btn-toolbar .btn-group { + float: left; +} + +.btn-toolbar > .btn + .btn, +.btn-toolbar > .btn-group + .btn, +.btn-toolbar > .btn + .btn-group, +.btn-toolbar > .btn-group + .btn-group { + margin-left: 5px; +} + +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} + +.btn-group > .btn:first-child { + margin-left: 0; +} + +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} + +.btn-group > .btn-group { + float: left; +} + +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} + +.btn-group > .btn-group:first-child > .btn:last-child, +.btn-group > .btn-group:first-child > .dropdown-toggle { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.btn-group > .btn-group:last-child > .btn:first-child { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} + +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} + +.btn-group > .btn + .dropdown-toggle { + padding-right: 8px; + padding-left: 8px; +} + +.btn-group > .btn-large + .dropdown-toggle { + padding-right: 12px; + padding-left: 12px; +} + +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} + +.btn .caret { + margin-left: 0; +} + +.btn-large .caret { + border-width: 5px; +} + +.dropup .btn-large .caret { + border-bottom-width: 5px; +} + +.btn-group-vertical > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; +} + +.btn-group-vertical > .btn + .btn { + margin-top: -1px; +} + +.btn-group-vertical .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} + +.btn-group-vertical .btn:first-child { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.btn-group-vertical .btn:last-child { + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +.btn-group-justified { + display: table; + width: 100%; +} + +.btn-group-justified .btn { + display: table-cell; + float: none; + width: 1%; +} + +.btn-group[data-toggle="buttons"] > .btn > input[type="radio"], +.btn-group[data-toggle="buttons"] > .btn > input[type="checkbox"] { + display: none; +} + +.breadcrumb { + padding: 8px 15px; + margin-bottom: 20px; + list-style: none; + background-color: #f5f5f5; + border-radius: 4px; +} + +.breadcrumb > li { + display: inline-block; +} + +.breadcrumb > li + li:before { + padding: 0 5px; + color: #cccccc; + content: "/\00a0"; +} + +.breadcrumb > .active { + color: #999999; +} + +.pagination { + display: inline-block; + padding-left: 0; + margin: 20px 0; + border-radius: 4px; +} + +.pagination > li { + display: inline; +} + +.pagination > li > a, +.pagination > li > span { + float: left; + padding: 4px 12px; + line-height: 1.428571429; + text-decoration: none; + background-color: #ffffff; + border: 1px solid #dddddd; + border-left-width: 0; +} + +.pagination > li:first-child > a, +.pagination > li:first-child > span { + border-left-width: 1px; + border-bottom-left-radius: 4px; + border-top-left-radius: 4px; +} + +.pagination > li:last-child > a, +.pagination > li:last-child > span { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +.pagination > li > a:hover, +.pagination > li > a:focus, +.pagination > .active > a, +.pagination > .active > span { + background-color: #f5f5f5; +} + +.pagination > .active > a, +.pagination > .active > span { + color: #999999; + cursor: default; +} + +.pagination > .disabled > span, +.pagination > .disabled > a, +.pagination > .disabled > a:hover, +.pagination > .disabled > a:focus { + color: #999999; + cursor: not-allowed; + background-color: #ffffff; +} + +.pagination-large > li > a, +.pagination-large > li > span { + padding: 14px 16px; + font-size: 18px; +} + +.pagination-large > li:first-child > a, +.pagination-large > li:first-child > span { + border-bottom-left-radius: 6px; + border-top-left-radius: 6px; +} + +.pagination-large > li:last-child > a, +.pagination-large > li:last-child > span { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} + +.pagination-small > li > a, +.pagination-small > li > span { + padding: 5px 10px; + font-size: 12px; +} + +.pagination-small > li:first-child > a, +.pagination-small > li:first-child > span { + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} + +.pagination-small > li:last-child > a, +.pagination-small > li:last-child > span { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} + +.pager { + padding-left: 0; + margin: 20px 0; + text-align: center; + list-style: none; +} + +.pager:before, +.pager:after { + display: table; + content: " "; +} + +.pager:after { + clear: both; +} + +.pager:before, +.pager:after { + display: table; + content: " "; +} + +.pager:after { + clear: both; +} + +.pager li { + display: inline; +} + +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #ffffff; + border: 1px solid #dddddd; + 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: not-allowed; + background-color: #ffffff; +} + +.modal-open { + overflow: hidden; +} + +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + display: none; + overflow: auto; + overflow-y: scroll; +} + +.modal.fade .modal-dialog { + -webkit-transform: translate(0, -25%); + -ms-transform: translate(0, -25%); + transform: translate(0, -25%); + -webkit-transition: -webkit-transform 0.3s ease-out; + -moz-transition: -moz-transform 0.3s ease-out; + -o-transition: -o-transform 0.3s ease-out; + transition: transform 0.3s ease-out; +} + +.modal.fade.in .modal-dialog { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0); +} + +.modal-dialog { + position: relative; + top: 0; + right: 0; + left: 0; + z-index: 1050; + width: auto; + padding: 10px; +} + +.modal-content { + position: relative; + background-color: #ffffff; + border: 1px solid #999999; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + outline: none; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + background-clip: padding-box; +} + +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; + background-color: #000000; +} + +.modal-backdrop.fade { + opacity: 0; + filter: alpha(opacity=0); +} + +.modal-backdrop.fade.in { + opacity: 0.5; + filter: alpha(opacity=50); +} + +.modal-header { + min-height: 16.428571429px; + padding: 15px; + border-bottom: 1px solid #e5e5e5; +} + +.modal-header .close { + margin-top: -2px; +} + +.modal-title { + margin: 0; + line-height: 1.428571429; +} + +.modal-body { + position: relative; + padding: 20px; +} + +.modal-footer { + padding: 19px 20px 20px; + margin-top: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; +} + +.modal-footer:before, +.modal-footer:after { + display: table; + content: " "; +} + +.modal-footer:after { + clear: both; +} + +.modal-footer:before, +.modal-footer:after { + display: table; + 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; +} + +@media screen and (min-width: 768px) { + .modal-dialog { + right: auto; + left: 50%; + width: 560px; + padding-top: 30px; + padding-bottom: 30px; + margin-left: -280px; + } + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + } +} + +.tooltip { + position: absolute; + z-index: 1030; + display: block; + font-size: 12px; + line-height: 1.4; + opacity: 0; + filter: alpha(opacity=0); + visibility: visible; +} + +.tooltip.in { + opacity: 1; + filter: alpha(opacity=100); +} + +.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: 3px 8px; + color: #ffffff; + text-align: center; + text-decoration: none; + background-color: rgba(0, 0, 0, 0.9); + 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: rgba(0, 0, 0, 0.9); + border-width: 5px 5px 0; +} + +.tooltip.top-left .tooltip-arrow { + bottom: 0; + left: 5px; + border-top-color: rgba(0, 0, 0, 0.9); + border-width: 5px 5px 0; +} + +.tooltip.top-right .tooltip-arrow { + right: 5px; + bottom: 0; + border-top-color: rgba(0, 0, 0, 0.9); + border-width: 5px 5px 0; +} + +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-right-color: rgba(0, 0, 0, 0.9); + border-width: 5px 5px 5px 0; +} + +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-left-color: rgba(0, 0, 0, 0.9); + border-width: 5px 0 5px 5px; +} + +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-bottom-color: rgba(0, 0, 0, 0.9); + border-width: 0 5px 5px; +} + +.tooltip.bottom-left .tooltip-arrow { + top: 0; + left: 5px; + border-bottom-color: rgba(0, 0, 0, 0.9); + border-width: 0 5px 5px; +} + +.tooltip.bottom-right .tooltip-arrow { + top: 0; + right: 5px; + border-bottom-color: rgba(0, 0, 0, 0.9); + border-width: 0 5px 5px; +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1010; + display: none; + max-width: 276px; + padding: 1px; + text-align: left; + white-space: normal; + background-color: #ffffff; + border: 1px solid #cccccc; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + background-clip: padding-box; + -webkit-bg-clip: padding-box; + -moz-bg-clip: padding; +} + +.popover.top { + margin-top: -10px; +} + +.popover.right { + margin-left: 10px; +} + +.popover.bottom { + margin-top: 10px; +} + +.popover.left { + margin-left: -10px; +} + +.popover-title { + padding: 8px 14px; + margin: 0; + font-size: 14px; + font-weight: normal; + line-height: 18px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 5px 5px 0 0; +} + +.popover-content { + padding: 9px 14px; +} + +.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: #999999; + 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; + content: " "; +} + +.popover.right .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-right-color: #999999; + 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; + content: " "; +} + +.popover.bottom .arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-bottom-color: #999999; + 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; + content: " "; +} + +.popover.left .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-left-color: #999999; + 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; + content: " "; +} + +.alert { + padding: 10px 35px 10px 15px; + margin-bottom: 20px; + color: #c09853; + background-color: #fcf8e3; + border: 1px solid #fbeed5; + border-radius: 4px; +} + +.alert h4 { + margin-top: 0; + color: inherit; +} + +.alert hr { + border-top-color: #f8e5be; +} + +.alert .alert-link { + font-weight: 500; + color: #a47e3c; +} + +.alert .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; +} + +.alert-success { + color: #468847; + background-color: #dff0d8; + border-color: #d6e9c6; +} + +.alert-success hr { + border-top-color: #c9e2b3; +} + +.alert-success .alert-link { + color: #356635; +} + +.alert-danger { + color: #b94a48; + background-color: #f2dede; + border-color: #eed3d7; +} + +.alert-danger hr { + border-top-color: #e6c1c7; +} + +.alert-danger .alert-link { + color: #953b39; +} + +.alert-info { + color: #3a87ad; + background-color: #d9edf7; + border-color: #bce8f1; +} + +.alert-info hr { + border-top-color: #a6e1ec; +} + +.alert-info .alert-link { + color: #2d6987; +} + +.alert-block { + padding-top: 15px; + padding-bottom: 15px; +} + +.alert-block > p, +.alert-block > ul { + margin-bottom: 0; +} + +.alert-block p + p { + margin-top: 5px; +} + +.thumbnail, +.img-thumbnail { + padding: 4px; + line-height: 1.428571429; + background-color: #ffffff; + border: 1px solid #dddddd; + border-radius: 4px; + -webkit-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} + +.thumbnail { + display: block; +} + +.thumbnail > img, +.img-thumbnail { + display: inline-block; + height: auto; + max-width: 100%; +} + +a.thumbnail:hover, +a.thumbnail:focus { + border-color: #428bca; +} + +.thumbnail > img { + margin-right: auto; + margin-left: auto; +} + +.thumbnail .caption { + padding: 9px; + color: #333333; +} + +.media, +.media-body { + overflow: hidden; + 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 { + padding-left: 0; + list-style: none; +} + +.label { + display: inline; + padding: .25em .6em; + font-size: 75%; + font-weight: 500; + line-height: 1; + color: #ffffff; + text-align: center; + white-space: nowrap; + vertical-align: middle; + background-color: #999999; + border-radius: .25em; +} + +.label[href]:hover, +.label[href]:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; + background-color: #808080; +} + +.label-danger { + background-color: #d9534f; +} + +.label-danger[href]:hover, +.label-danger[href]:focus { + background-color: #c9302c; +} + +.label-success { + background-color: #5cb85c; +} + +.label-success[href]:hover, +.label-success[href]:focus { + background-color: #449d44; +} + +.label-warning { + background-color: #f0ad4e; +} + +.label-warning[href]:hover, +.label-warning[href]:focus { + background-color: #ec971f; +} + +.label-info { + background-color: #5bc0de; +} + +.label-info[href]:hover, +.label-info[href]:focus { + background-color: #31b0d5; +} + +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + line-height: 1; + color: #ffffff; + text-align: center; + white-space: nowrap; + vertical-align: middle; + background-color: #999999; + border-radius: 10px; +} + +.badge:empty { + display: none; +} + +a.badge:hover, +a.badge:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} + +.btn .badge { + position: relative; + top: -1px; +} + +a.list-group-item.active > .badge, +.nav-pills > .active > a > .badge { + color: #428bca; + background-color: #ffffff; +} + +.nav-pills > li > a > .badge { + margin-left: 3px; +} + +@-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: #f5f5f5; + border-radius: 4px; + -webkit-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; + background-color: #428bca; + -webkit-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-transition: width 0.6s ease; + transition: width 0.6s ease; +} + +.progress-striped .progress-bar { + background-color: #428bca; + 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: 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-size: 40px 40px; +} + +.progress.active .progress-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-bar-danger { + background-color: #d9534f; +} + +.progress-striped .progress-bar-danger { + background-color: #d9534f; + 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: 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-bar-success { + background-color: #5cb85c; +} + +.progress-striped .progress-bar-success { + background-color: #5cb85c; + 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: 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-bar-warning { + background-color: #f0ad4e; +} + +.progress-striped .progress-bar-warning { + background-color: #f0ad4e; + 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: 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-bar-info { + background-color: #5bc0de; +} + +.progress-striped .progress-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: 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; + border-radius: 4px; +} + +.accordion-heading { + border-bottom: 0; +} + +.accordion-heading .accordion-toggle { + display: block; + padding: 8px 15px; + cursor: pointer; +} + +.accordion-inner { + padding: 9px 15px; + border-top: 1px solid #e5e5e5; +} + +.carousel { + position: relative; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} + +.carousel-inner > .item { + position: relative; + display: none; + -webkit-transition: 0.6s ease-in-out left; + transition: 0.6s ease-in-out left; +} + +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: inline-block; + height: auto; + max-width: 100%; + 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: 0; + bottom: 0; + left: 0; + width: 15%; + font-size: 20px; + color: #ffffff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); + opacity: 0.5; + filter: alpha(opacity=50); +} + +.carousel-control.left { + background-color: rgba(0, 0, 0, 0.0001); + background-color: transparent; + background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001))); + background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.5) 0), color-stop(rgba(0, 0, 0, 0.0001) 100%)); + background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); +} + +.carousel-control.right { + right: 0; + left: auto; + background-color: rgba(0, 0, 0, 0.5); + background-color: transparent; + background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5))); + background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.0001) 0), color-stop(rgba(0, 0, 0, 0.5) 100%)); + background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); +} + +.carousel-control:hover, +.carousel-control:focus { + color: #ffffff; + text-decoration: none; + opacity: 0.9; + filter: alpha(opacity=90); +} + +.carousel-control .glyphicon, +.carousel-control .icon-prev, +.carousel-control .icon-next { + position: absolute; + top: 50%; + left: 50%; + z-index: 5; + display: inline-block; + width: 20px; + height: 20px; + margin-top: -10px; + margin-left: -10px; + font-family: serif; +} + +.carousel-control .icon-prev:before { + content: '\2039'; +} + +.carousel-control .icon-next:before { + content: '\203a'; +} + +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 120px; + padding-left: 0; + margin-left: -60px; + text-align: center; + list-style: none; +} + +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + cursor: pointer; + border: 1px solid #ffffff; + border-radius: 10px; +} + +.carousel-indicators .active { + width: 12px; + height: 12px; + margin: 0; + background-color: #ffffff; +} + +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #ffffff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); +} + +.carousel-caption .btn { + text-shadow: none; +} + +@media screen and (min-width: 768px) { + .carousel-control .glyphicon, + .carousel-control .icon-prev, + .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -15px; + margin-left: -15px; + font-size: 30px; + } + .carousel-caption { + right: 20%; + left: 20%; + padding-bottom: 30px; + } + .carousel-indicators { + bottom: 20px; + } +} + +.jumbotron { + padding: 30px; + margin-bottom: 30px; + font-size: 21px; + font-weight: 200; + line-height: 2.1428571435; + color: inherit; + background-color: #eeeeee; +} + +.jumbotron h1 { + line-height: 1; + color: inherit; +} + +.jumbotron p { + line-height: 1.4; +} + +@media screen and (min-width: 768px) { + .jumbotron { + padding: 50px 60px; + border-radius: 6px; + } + .jumbotron h1 { + font-size: 63px; + } +} + +.clearfix:before, +.clearfix:after { + display: table; + content: " "; +} + +.clearfix:after { + clear: both; +} + +.pull-right { + float: right; +} + +.pull-left { + float: left; +} + +.hide { + display: none !important; +} + +.show { + display: block !important; +} + +.invisible { + visibility: hidden; +} + +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.affix { + position: fixed; +} + +@-ms-viewport { + width: device-width; +} + +@media screen and (max-width: 400px) { + @-ms-viewport { + width: 320px; + } +} + +.hidden { + display: none !important; + visibility: hidden !important; +} + +.visible-sm { + display: block !important; +} + +tr.visible-sm { + display: table-row !important; +} + +th.visible-sm, +td.visible-sm { + display: table-cell !important; +} + +.visible-md { + display: none !important; +} + +tr.visible-md { + display: none !important; +} + +th.visible-md, +td.visible-md { + display: none !important; +} + +.visible-lg { + display: none !important; +} + +tr.visible-lg { + display: none !important; +} + +th.visible-lg, +td.visible-lg { + display: none !important; +} + +.hidden-sm { + display: none !important; +} + +tr.hidden-sm { + display: none !important; +} + +th.hidden-sm, +td.hidden-sm { + display: none !important; +} + +.hidden-md { + display: block !important; +} + +tr.hidden-md { + display: table-row !important; +} + +th.hidden-md, +td.hidden-md { + display: table-cell !important; +} + +.hidden-lg { + display: block !important; +} + +tr.hidden-lg { + display: table-row !important; +} + +th.hidden-lg, +td.hidden-lg { + display: table-cell !important; +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: none !important; + } + tr.visible-sm { + display: none !important; + } + th.visible-sm, + td.visible-sm { + display: none !important; + } + .visible-md { + display: block !important; + } + tr.visible-md { + display: table-row !important; + } + th.visible-md, + td.visible-md { + display: table-cell !important; + } + .visible-lg { + display: none !important; + } + tr.visible-lg { + display: none !important; + } + th.visible-lg, + td.visible-lg { + display: none !important; + } + .hidden-sm { + display: block !important; + } + tr.hidden-sm { + display: table-row !important; + } + th.hidden-sm, + td.hidden-sm { + display: table-cell !important; + } + .hidden-md { + display: none !important; + } + tr.hidden-md { + display: none !important; + } + th.hidden-md, + td.hidden-md { + display: none !important; + } + .hidden-lg { + display: block !important; + } + tr.hidden-lg { + display: table-row !important; + } + th.hidden-lg, + td.hidden-lg { + display: table-cell !important; + } +} + +@media (min-width: 992px) { + .visible-sm { + display: none !important; + } + tr.visible-sm { + display: none !important; + } + th.visible-sm, + td.visible-sm { + display: none !important; + } + .visible-md { + display: none !important; + } + tr.visible-md { + display: none !important; + } + th.visible-md, + td.visible-md { + display: none !important; + } + .visible-lg { + display: block !important; + } + tr.visible-lg { + display: table-row !important; + } + th.visible-lg, + td.visible-lg { + display: table-cell !important; + } + .hidden-sm { + display: block !important; + } + tr.hidden-sm { + display: table-row !important; + } + th.hidden-sm, + td.hidden-sm { + display: table-cell !important; + } + .hidden-md { + display: block !important; + } + tr.hidden-md { + display: table-row !important; + } + th.hidden-md, + td.hidden-md { + display: table-cell !important; + } + .hidden-lg { + display: none !important; + } + tr.hidden-lg { + display: none !important; + } + th.hidden-lg, + td.hidden-lg { + display: none !important; + } +} + +.visible-print { + display: none !important; +} + +tr.visible-print { + display: none !important; +} + +th.visible-print, +td.visible-print { + display: none !important; +} + +@media print { + .visible-print { + display: block !important; + } + tr.visible-print { + display: table-row !important; + } + th.visible-print, + td.visible-print { + display: table-cell !important; + } + .hidden-print { + display: none !important; + } + tr.hidden-print { + display: none !important; + } + th.hidden-print, + td.hidden-print { + display: none !important; + } +} \ No newline at end of file diff --git a/css/ese-logo.png b/css/ese-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..90814f23b7a884623df23050d27f62f4e05b74a8 GIT binary patch literal 21922 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 literal 0 HcmV?d00001 diff --git a/css/print.css b/css/print.css new file mode 100644 index 0000000..db7c031 --- /dev/null +++ b/css/print.css @@ -0,0 +1,67 @@ +@page { size:21.0cm 29.7cm; margin:1cm 0.5cm 1cm 0.5cm; } +body { + margin: 0mm; + padding: 0mm; + font-family: Arial; +} + +.container { + width:20cm; + margin: 0mm; + padding: 0mm; +} + +.ticket { + width: 6cm; +/* border: 1px dotted #ccc;*/ + float: left; + padding: 3mm; + page-break-inside: avoid; +} + +.tickettext { + float: left; +/* width: 4.3cm; */ +} + +.ticketimg { + float: right; + margin: 2mm 0 0 0; + padding: 0px; +} + +.ticketimg img { + height: 1.81cm; + margin: 0px; + padding: 0px; +} + +.patron { + font-size: 16pt; + font-family:Haettenschweiler; +} + +.room { + margin-top: 1mm; +} + +.time { + margin-bottom: 1mm; +} + +.room, .time { + font-size: 8pt; + width: 100%; + text-align: right; +} + +.evalink { + font-size: 7pt; + clear: both; +} + +code { + width: 100%; + font-family: Monaco, monospace; + font-size: 10.5pt; +} diff --git a/css/style.css b/css/style.css new file mode 100644 index 0000000..18e72a6 --- /dev/null +++ b/css/style.css @@ -0,0 +1,76 @@ +/*============================================================================ +// Name : style.css +// Author : Patrick Reipschläger +// Version : 1.0 +// Date : 2013 +// Description : Provides some customized styling for the twitter bootstrap +// css files. Used for the ESE questionnaire. +//==========================================================================*/ + +input[type="text"] +{ + margin-top:5px; +} + +input[type="checkbox"] +{ + background-color:#FFF0F0; +} + +input[type="submit"] +{ + background-color:#E0E0FF; + font-size:16pt; +} + +label +{ + font-weight:normal; +} + +textarea.form-control +{ + height:100px; +} + +p.lead +{ + margin-top:10px; + margin-bottom:10px; +} + +p.center +{ + text-align:center; +} + +div.container +{ + background-color:#F8F8FF; +} + +div.row +{ + margin-left:0px; + margin-right:0px; +} + +div.equalrow +{ + background-color:#F0F0FF; +} + +div.unequalrow +{ + background-color:transparent; +} + +div.hidden +{ + display:none; +} + +h1 +{ + text-align:center; +} \ No newline at end of file diff --git a/index.php b/index.php new file mode 100644 index 0000000..3761f61 --- /dev/null +++ b/index.php @@ -0,0 +1,102 @@ + + + + + + + ESE Evaluation für Studenten + + + + +
+
+ Bitte versuch es später nocheinmal oder wende dich an einen der Verantwortlichen."); + else + CreateKeyMessageBox($keyState); + CreateQuestionnaireElement("code", $questionnaire, $_POST); + CreateQuestionnaireElement("tutorName", $questionnaire, $_POST); + CreateQuestionnaireElement("legend", $questionnaire, $_POST); + CreateAllQuestionElements($questionnaire, $_POST); + CreateQuestionnaireElement("comment", $questionnaire, $_POST); + ?> +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/keyControlPanel.php b/keyControlPanel.php new file mode 100644 index 0000000..0e170df --- /dev/null +++ b/keyControlPanel.php @@ -0,0 +1,287 @@ + + + + + + + ESE Evaluation - Key Control Center + + + + +
+
+ \n"; + echo "

Bitte wähle die gewünschte Aktion aus:

\n"; + echo "
\n"; + echo "\n"; + + CreateOption("ESE Code Status auf 'Nicht Ausgegeben' setzen", STATE_ACTION_UNISSUED, true); + CreateOption("ESE Code Status auf 'Ausgegeben' setzen", STATE_ACTION_ISSUED, true); + CreateOption("ESE Code Status auf 'Fragebogen ausgefüllt' setzen", STATE_ACTION_ACTIVATED, true); + CreateOption("ESE Code Status auf 'eingelöst' setzen", STATE_ACTION_USED, true); + CreateOption("Neuen ESE-Code eingeben", STATE_ACTION_NEWCODE, true, true); + break; + } + ?> +
+ +
+ + + + + + +\n"; + echo " \n"; + echo " \n"; + echo "\n"; + } + /** + * Echos the key code text box. + * + * @param string $keyCode The key that should be displayed in the box. + * @param boolean $enabled Indicates if the key code box should be enabled or not. + */ + function CreateKeyCodeBox($keyCode, $enabled) + { + CreateRowHeader(); + echo "
\n"; + echo "

ESE Code:

\n"; + echo "
\n"; + echo "
\n"; + echo " \n"; + echo "
\n"; + echo "\n"; + } + /** + * Echos the access code box according the current state of the form. + * + * @param integer $formState The current state of the form. + */ + function CreateAccessBox($formState) + { + if ($formState < STATE_ACCESS_SUCCESSFULL) + echo "
\n"; + else + echo "\n"; + } + /** + * Creates a information message box depending on the current state of the form. + * + * @param integer $formState The current state of the form. + */ + function CreateInfoBox($formState) + { + switch ($formState) + { + case STATE_ACCESS_ENTER: CreateMessageBox(MSG_INFO, "Zugang:", "Bitte gib den korrekten Zugangscode ein, um das Key Control Panel nutzen zu können"); break; + case STATE_ACCESS_FAILED: CreateMessageBox(MSG_DANGER, "Zugang:", "Der eingegebene Zugangscode war falsch! Bitte überprüfe deine Eingabe."); break; + case STATE_ACCESS_SUCCESSFULL: CreateMessageBox(MSG_SUCCESS, "Zugang:", "Der eingegebene Zugangscode war korrekt! Bitte gib nun den ESE Code ein, welchen du überprüfen oder verändern möchtest."); break; + case STATE_KEY_NONEXISTENT: CreateMessageBox(MSG_DANGER, "Achtung:", "Der eingegebene ESE Code wurde nicht gefunden! Bitte überprüfe deine Eingabe."); break; + case STATE_KEY_UNISSUED: CreateMessageBox(MSG_WARNING, "ESE Code gefunden:", "Der eingegebene ESE Code wurde gefunden. Der Schlüssel wurde nicht an einen Studenten ausgegeben!."); break; + case STATE_KEY_ISSUED: CreateMessageBox(MSG_INFO, "ESE Code gefunden:", "Der Schlüssel wurde an einen Studenten ausgegeben, der Fragebogen wurde noch nicht ausgefüllt."); break; + case STATE_KEY_ACTIVATED: CreateMessageBox(MSG_INFO, "ESE Code gefunden:", "Der Schlüssel wurde an einen Studenten ausgegeben, der Fragebogen wurde ausgefüllt."); break; + case STATE_KEY_USED: CreateMessageBox(MSG_WARNING, "ESE Code gefunden:", "Der Schlüssel wurde an einen Studenten ausgegeben, der Fragebogen wurde ausgefüllt und der Student hat bereits eine ESE Tasse erhalten."); break; + case STATE_ACTION_UNISSUED: CreateMessageBox(MSG_SUCCESS, "ESE Code Status geändert:", "Der Schlüssel wurde erfolgreich auf den Status Nicht Ausgegeben gesetzt. Bitte gib einen ESE Code ein, welchen du überprüfen oder verändern möchtest."); break; + case STATE_ACTION_ISSUED: CreateMessageBox(MSG_SUCCESS, "ESE Code Status geändert:", "Der Schlüssel wurde erfolgreich auf den Status Ausgegeben gesetzt. Bitte gib einen ESE Code ein, welchen du überprüfen oder verändern möchtest."); break; + case STATE_ACTION_ACTIVATED: CreateMessageBox(MSG_SUCCESS, "ESE Code Status geändert:", "Der Schlüssel wurde erfolgreich auf den Status Fragebogen ausgefüllt gesetzt. Bitte gib einen ESE Code ein, welchen du überprüfen oder verändern möchtest."); break; + case STATE_ACTION_USED: CreateMessageBox(MSG_SUCCESS, "ESE Code Status geändert:", "Der Schlüssel wurde erfolgreich auf den Status Eingelöst gesetzt. Bitte gib einen ESE Code ein, welchen du überprüfen oder verändern möchtest."); break; + case STATE_ACTION_NEWCODE: CreateMessageBox(MSG_INFO, "ESE Code eingeben:", "Bitte gib den ESE Code ein, welchen du überprüfen oder verändern möchtest."); break; + case STATE_ACTION_FAILED: CreateMessageBox(MSG_DANGER, "Achtung:", "Der Status des angegebenen Schlüssels konnte nicht geändert werden! Bitte überprüfe deine Eingabe."); break; + } + } + /** + * Converts the specified key state constant to a valid form state constant + * + * @param string $keySate The key state that should be converted. + * @return integer + */ + function KeyStateToFormState($keyState) + { + switch($keyState) + { + case KEYSTATE_NONEXISTENT: return STATE_KEY_NONEXISTENT; + case KEYSTATE_UNISSUED: return STATE_KEY_UNISSUED; + case KEYSTATE_ISSUED: return STATE_KEY_ISSUED; + case KEYSTATE_ACTIVATED: return STATE_KEY_ACTIVATED; + case KEYSTATE_USED: return STATE_KEY_USED; + } + return STATE_NONE; + } + /** + * Converts the specified form state constant to a valid key state constant + * + * @param integer The form state that should be converted. + * @return integer + */ + function FormStateToKeyState($keyState) + { + switch($keyState) + { + case STATE_KEY_NONEXISTENT: + return KEYSTATE_NONEXISTENT; + case STATE_KEY_UNISSUED: + case STATE_ACTION_UNISSUED: + return KEYSTATE_UNISSUED; + case STATE_KEY_ISSUED: + case STATE_ACTION_ISSUED: + return KEYSTATE_ISSUED; + case STATE_KEY_ACTIVATED: + case STATE_ACTION_ACTIVATED: + return KEYSTATE_ACTIVATED; + case STATE_KEY_USED: + case STATE_ACTION_USED: + return KEYSTATE_USED; + } + return KEYSTATE_NONEXISTENT; + } +?> \ No newline at end of file diff --git a/keyTable.php b/keyTable.php new file mode 100644 index 0000000..03b2aa7 --- /dev/null +++ b/keyTable.php @@ -0,0 +1,158 @@ + 0) + { + $key = GenerateKey(); + $duplicate = false; + foreach($keyData as $entry) + if ($entry[0] == $key) + { + $duplicate = true; + break; + } + if ($duplicate) + continue; + array_push($keyData, array($key, KEYSTATE_UNISSUED)); + $amount--; + } + WriteKeyFile($keyFile, $keyData); + } + else + $keyData = ReadKeyFile($keyFile); + } + // if the page was refreshed by the user, just load the key file + else + $keyData = ReadKeyFile($keyFile); + // generate a new submission id that is used within the form to prevent double posts + $_SESSION["submissionId"] = rand(); +?> + + + + + + ESE Evaluation für Studenten + + + + +
+ + \n"; + CreateSectionHeader("Key Overview"); + + CreateRowHeader(); + echo "
\n

Index

\n
\n"; + echo "
\n

Code

\n
\n"; + echo "
\n

State

\n
\n"; + echo "
\n

Delete

\n
\n"; + echo "
"; + + for ($i = 0; $i < count($keyData); $i++) + { + CreateRowHeader(); + echo "
\n"; + echo "

" . $i . "

\n"; + echo " "; + echo "
\n"; + + echo "
\n"; + echo " \n"; + echo "
\n"; + + echo "
\n"; + echo " "; + echo "
\n"; + + echo "
\n"; + echo " \n"; + echo "
\n"; + echo "
\n"; + } + + CreateRowHeader(); + echo "
\n \n
\n"; + echo "
\n"; + echo "
\n \n
\n"; + echo "\n"; + + // Hidden input with previously generated id - used for preventing double posts + echo "\n"; + echo "\n"; + ?> + \n"; + CreateSectionHeader("Key File Manipulation"); + CreateTextBox("Number of keys", "keyAmount", "10"); + CreateTextBox("Key file name", "keyFile", $keyFile); + + CreateRowHeader(); + echo "
\n \n
\n"; + echo "
\n"; + echo "
\n \n
\n"; + echo "\n"; + + // Hidden input with previously generated id - used for preventing double posts + echo "\n"; + echo "\n"; + ?> + + + diff --git a/libs/chartLib.php b/libs/chartLib.php new file mode 100644 index 0000000..ce2cbd8 --- /dev/null +++ b/libs/chartLib.php @@ -0,0 +1,117 @@ +150) + { + $Xoffset=$Xoffset/10; + } + + //lines out of image + if($width < ($XLength * $Xoffset) || $height < ($YLength * $Yoffset)) + { + echo "lines out of boundaries"; + } + + $black = ImageColorAllocate($image, 0, 0, 0); + + + $left = ($width - $XLength * $Xoffset)/2; + $right = $width-$left; + $upper = ($YLength * $Yoffset)+$Yoffset; + $YSpace = ($upper - $Yoffset)/$YLength; + $XSpace = ($right - $left)/$XLength; + + //draws X-Axis + ImageLine($image, $left, $upper, $right, $upper, $black); + + //draws y-Axis with Yoffset as upper margin + ImageLine($image, $left, $upper,$left, $Yoffset,$black); + + //draws arrows + ImageLine($image, $right-5, $upper-5,$right,$upper,$black); + ImageLine($image, $right-5, $upper+5,$right,$upper,$black); + ImageLine($image, $left, $Yoffset,$left+5,$Yoffset+5,$black); + ImageLine($image, $left, $Yoffset,$left-5,$Yoffset+5,$black); + + //draws lines for measurement at the y-Axis + for($i=1;$i<$YLength;$i++) + { + ImageLine($image, $left-4, $upper-$YSpace*$i ,$left+4, $upper-$YSpace*$i,$black); + } + + //same for the x-Axis + for($j=1;$j<$XLength;$j++) + { + ImageLine($image, $left+$XSpace*$j, $upper-4 ,$left+$XSpace*$j, $upper+4,$black); + } + + //caption for x-Axis + $index=0; + while($index < $XLength) + { + if($index % 5 == 0) + { + ImageString($image, 4, $left+($XSpace*$index)-($Xoffset/4), $upper+($Yoffset/3), $index, $black); + } + $index++; + } + + //caption for y-Axis + $index=0; + while($index < count($values)) + { + ImageString($image, 4, $left-(0*$Xoffset+30), $upper-$YSpace*$index-($Yoffset*0.7), $values[$index], $black); + $index++; + } +} + +function DrawBar($image, $length, $maxOfX ,$position, $maxOfY, $value, $color) +{ + $imgWidth = ImageSX($image); + $imgHeight = ImageSY($image); + + //scale offset for each axis and minimize Xoffset for small values of maxOfX + $Xoffset = 0.8*($imgWidth/$maxOfX); + $Yoffset = 0.8*($imgHeight/$maxOfY); + + if($Xoffset>150) + { + $Xoffset=$Xoffset/10; + } + + $length = $length*$Xoffset; + $black = ImageColorAllocate($image, 0, 0, 0); + + $left = ($imgWidth - $maxOfX * $Xoffset)/2; + $upper = /*($maxOfY*$Yoffset) +*/ $Yoffset + ($position*$Yoffset); + $right = $left+$length; + ImageFilledRectangle($image, $left, $upper, $right, $upper-$Yoffset, $color); + ImageString($image, 4, $right+($Xoffset/3), $upper-$Yoffset*0.7, $value, $black); +} + +function CreateImage($width, $height) +{ + $image = ImageCreate($width, $height); + $white = ImageColorAllocateAlpha($image, 255, 255, 255, 127); + + ImageFill($image, 0, 0, $white); + ImageSaveAlpha($image, TRUE); + + return $image; +} +?> \ No newline at end of file diff --git a/libs/formLib.php b/libs/formLib.php new file mode 100644 index 0000000..93f1198 --- /dev/null +++ b/libs/formLib.php @@ -0,0 +1,263 @@ +\n"; + else + echo "
\n"; + } + /** + * Echos a new headline division with the specified text with switching + * row styles. + * + * @param string $text The text that should be displayed in the headline. + */ + function CreateHeadline($text) + { + CreateRowHeader(); + echo "
\n"; + echo "

" . $text . "

\n"; + echo "
\n"; + echo "
\n"; + } + /** + * Echos a new section headline with the specified text and switching + * row styles. + * + * @param string $text The text that should be displayed in the section header. + */ + function CreateSectionHeader($text) + { + CreateRowHeader(); + echo "
\n"; + echo "

" . $text . "

\n"; + echo "
\n"; + echo "\n"; + } + /** + * Echos a new paragraph with the specified text and switching + * row styles. + * + * @param string $text The text that should be displayed in the paragraph. + */ + function CreateParagraph($text) + { + CreateRowHeader(); + echo "
\n"; + echo "

" . $text . "

\n"; + echo "
\n"; + echo "\n"; + } + /** + * Echos a new paragraph with the specified link and switching + * row styles. + * + * @param string $text The text that should be displayed for the link. + * @param string $link The target to which should be linked. + */ + function CreateLink($text, $link) + { + CreateRowHeader(); + echo "
\n"; + echo "

" . $text . "

\n"; + echo "
\n"; + echo "\n"; + } + /** + * Echos a new division with a labelled text box and switching row styles. + * + * @param string $label The label that should be displayed for the text box. + * @param string $id The unique id that is used to identify the text box. + * @param string $value The text that should be displayed within the text box. + * The default value is no text. + */ + function CreateTextBox($label, $id, $value = "") + { + CreateRowHeader(); + echo "
\n"; + echo "

" . $label . "

\n"; + echo "
\n"; + echo "
\n"; + echo " \n"; + echo "
\n"; + echo "\n"; + } + /** + * Echos a new division with the questionnaire answer legend and switching row styles. + * Should only be used once at the top of the list of questions. + */ + function CreateLegend() + { + CreateRowHeader(); + echo "

Bewertung:

\n"; + echo "
\n"; + echo "
\n"; + echo "

++

\n"; + echo "

+

\n"; + echo "

o

\n"; + echo "

-

\n"; + echo "

--

\n"; + echo "

N/A

\n"; + echo "
\n"; + echo "
\n"; + echo "\n"; + } + /** + * Echos a new division with a question and six radio buttons for the possible answer. + * + * @param string $id The unique id that is used to identify the question. + * @param integer $value Indicates which answer should initially be selected. + * The default value is -1, which means no answer is selected. + * The other possible values range from 1 to 6. + */ + function CreateQuestion($question, $id, $value = -1) + { + CreateRowHeader(); + echo "
\n"; + echo "

" . $question . "

\n"; + echo "
\n"; + echo "
\n"; + echo "
\n"; + for ($i = 1; $i < 7; $i++) + { + echo "
\n"; + } + echo "
\n"; + echo "
\n"; + echo "\n"; + } + /** + * Echos a new division with a labelled comment box and switching row styles. + * + * @param string $label The label that should be displayed for the comment box. + * @param string $id The unique id that is used to identify the comment box. + * @param string $value The comment that should be displayed within the comment box. + * The default value is no text. + */ + function CreateCommentBox($label, $id, $value = "") + { + CreateRowHeader(); + echo "
\n"; + echo "

" . $label . "

\n"; + echo "
\n"; + echo "
\n"; + echo " \n"; + echo "
\n"; + echo "\n"; + } + /** + * Echos a new division for the questionnaire element with the specified id. + * What kind of division is created id determined by the type of the element. + * + * @param string $id The unique id of the element that should be created. + * @param array $questionnaire The questionnaire data that is used to build the form. + * Passed by reference. + * @param array $formData The list of all form elements and their values. This should + * simply be the $_POST array that was submitted. + * Passed by reference. + */ + function CreateQuestionnaireElement($id, &$questionnaire, &$formData) + { + if (!isset($questionnaire[$id])) + return; + $entry = $questionnaire[$id]; + $type = $entry[0]; + $value = ""; + if (isset($formData[$id])) + $value = $formData[$id]; + + if ($type == Q_HEADLINE) + CreateHeadline($entry[1]); + if ($type == Q_LEGEND) + CreateLegend(); + else if ($type == Q_TEXTBOX) + CreateTextBox($entry[1], $id, $value); + else if ($type == Q_QUESTION) + CreateQuestion($entry[1], $id, $value); + else if ($type == Q_COMMENT) + CreateCommentBox($entry[1], $id, $value); + } + /** + * Echos a range of new divisions with switching row styles for all questions that + * the specified questionnaire data contains. Only the questions are created, nothing else. + * + * @param array $questionnaire The questionnaire data that is used to build the form. + * Passed by reference. + * @param array $formData The list of all form elements and their values. This should + * simply be the $_POST array that was submitted. + * Passed by reference. + */ + function CreateAllQuestionElements(&$questionnaire, &$formData) + { + foreach($questionnaire as $id => $entry) + { + $type = $entry[0]; + if ($type != Q_QUESTION) + continue; + $value = ""; + if (isset($formData[$id])) + $value = $formData[$id]; + CreateQuestion($entry[1], $id, $value); + } + } + /** + * Echos a new division with switching row styles that represents a message box. + * + * @param integer $msgType The type of message box that should be created. The MSG constants + * defined at the beginning of this file should be used for this parameter. + * @param string $header The text that should be displayed in the header of the message box. + * @param string $text The text that is displayed within the message box itself. + */ + function CreateMessageBox($msgType, $header, $text) + { + CreateRowHeader(false); + echo "
\n"; + echo "

" . $header . "

" . $text . "
"; + echo "
\n"; + echo "\n"; + } +?> \ No newline at end of file diff --git a/libs/keyLib.php b/libs/keyLib.php new file mode 100644 index 0000000..4471a6f --- /dev/null +++ b/libs/keyLib.php @@ -0,0 +1,166 @@ +alert('file opened');"; + $data = "Nr;Key;Status\n"; + $count = count($keyData) - 1; + for ($i = 0; $i < $count; $i++) + $data = $data . $i . ";" . $keyData[$i][0] . ";" . $keyData[$i][1] . "\n"; + $data = $data . $count . ";" . $keyData[$count][0] . ";" . $keyData[$count][1]; + $res = fwrite($handle, $data); + // debug Code + //if ($res == false) + // echo ""; + //else + // echo ""; + fclose($handle); + return true; + } + /** + * Get the current state of the specified key which will be one of the defines + * KEYSTATE constants. + * The data type of the key data should be an array of arrays consisting of the key and its state. + * + * @param array $keyData The key data array in which the key should be found. Passed by reference. + * @param string $key The key which state should be got. Passed by reference. + * @return integer + */ + function GetKeyState(&$keyData, &$key) + { + for ($i = 0; $i < count($keyData); $i++) + if ($key == $keyData[$i][0]) + return $keyData[$i][1]; + return KEYSTATE_NONEXISTENT; + } + /** + * Set the state of the specified key to the specified state. + * The data type of the $keyData should be an array of arrays consisting of the key and its state. + * Returns true if the key was found within the key data and the state has been changed, otherwise false. + * + * @param array $keyData The key data array in which the key should be found. Passed by reference. + * @param string $key The key which state should be changed. + * @param integer $newState The new state of the specified key. Must be on of the KEYSTATE constants. + * @return boolean + */ + function SetKeyState(&$keyData, &$key, $newState) + { + for ($i = 0; $i < count($keyData); $i++) + if ($key == $keyData[$i][0]) + { + $keyData[$i][1] = $newState; + return true; + } + return false; + } +?> \ No newline at end of file diff --git a/libs/loggingLib.php b/libs/loggingLib.php new file mode 100644 index 0000000..81e3bbf --- /dev/null +++ b/libs/loggingLib.php @@ -0,0 +1,304 @@ + $entry) + { + // the order is id, question and the number of times each of the six answers was picked + $fileData = $fileData . $id . ";"; + for ($i = 0; $i < 6; $i++) + $fileData = $fileData . $entry[$i] . ";"; + $fileData = $fileData . $entry[6] . "\n"; + } + // write tutor data block identifier + $fileData = $fileData . "###TutorData###\n"; + // write all tutor data to the file + foreach($tutorData as $id => $entry) + { + // the order is tutor name and the number of times each of the six answers was picked + $fileData = $fileData . $id . ";"; + for ($i = 0; $i < 5; $i++) + $fileData = $fileData . $entry[$i] . ";"; + $fileData = $fileData . $entry[5] . "\n"; + } + // write comment data block identifier + $fileData = $fileData . "###CommentData###"; + // write comment data + foreach($commentData as $comment) + // each comment is escapd by a new line containing three tilde characters + $fileData = $fileData . "\n" . $comment . "\n~~~"; + // write the generated data to the file and close it + fwrite($handle, $fileData); + fclose($handle); + return true; + } + /** + * Add the question data from the specified questionnaire form data to an existing form data array. + * + * @param array $formData The list of all form elements which for most cases will simply be the + * $_POST array that has been submitted by the questionnaire form. + * Passed by reference. + * @param array $commentData The list of existing question data that will be appended by the question + * Data of the form. Passed by reference. + */ + function AddQuestionData(&$formData, &$questionData, &$questionnaire) + { + foreach($formData as $id => $value) + { + if (!isset($questionnaire[$id])) + continue; + // get the type of the element with the same id as the form element from the questionnaire + $type = $questionnaire[$id][0]; + // check if the element is a question on continue with the next one if that is not hte case + if ($type != "Question") + continue; + // if there is not field for the current element in the question dsta array, create a new + // blank field containing the question and zeros for the number of times each answer was picked + if (array_key_exists($id, $questionData) == false) + $questionData[$id] = array($questionnaire[$id][1], 0, 0, 0, 0, 0, 0); + // increment the answer that was selected in the formular by one + $questionData[$id][(int)$value]++; + } + } + /** + * Add the tutor data from the specified questionnaire form data to an existing tutor data array. + * + * @param array $formData The list of all form elements which for most cases will simply be the + * $_POST array that has been submitted by the questionnaire form. + * Passed by reference. + * @param array $commentData The list of existing tutor data that will be appended by the tutor + * Data of the form. Passed by reference. + */ + function AddTutorData(&$formData, &$tutorData) + { + // get the name of the tutor from the form + $tutorName = $formData["tutorName"]; + // get the selected answer of the tutorRating from the form + $tutorValue = $formData["tutorRating"]; + // if there is no field for the current tutor in the tutor array, create a new + // nlank one with zeros for the number of times each answer was picked + if (array_key_exists($tutorName, $tutorData) == false) + $tutorData[$tutorName] = array(0, 0, 0, 0, 0, 0); + // increment the answer that was selected in the form by one + $tutorData[$tutorName][$tutorValue - 1]++; + } + /** + * Add the comment data from the specified questionnaire form data to an existing comment data array. + * + * @param array $formData The list of all form elements which for most cases will simply be the + * $_POST array that has been submitted by the questionnaire form. + * Passed by reference. + * @param array $commentData The list of existing comments that will be appended by the comment + * Data of the form. Passed by reference. + */ + function AddCommentData(&$formData, &$commentData) + { + // if the comment field was filled, the comment + // array is appended by the new comment + if (array_key_exists("comment", $formData) && trim($formData["comment"]) != "") + array_push($commentData, $formData["comment"]); + } +?> \ No newline at end of file diff --git a/libs/questionnaireLib.php b/libs/questionnaireLib.php new file mode 100644 index 0000000..be7b1e8 --- /dev/null +++ b/libs/questionnaireLib.php @@ -0,0 +1,77 @@ + \ No newline at end of file diff --git a/menu.php b/menu.php new file mode 100644 index 0000000..35c4f62 --- /dev/null +++ b/menu.php @@ -0,0 +1,25 @@ + + + + + + ESE Evaluation - Key Control Center + + + + +
+ +
+ + diff --git a/patronGen.php b/patronGen.php new file mode 100644 index 0000000..482d008 --- /dev/null +++ b/patronGen.php @@ -0,0 +1,75 @@ + + + + + + Namenspatronzettel + + + +
+
"; + echo "
".$patrons[$pno][0]."
"; + echo "
Tutorium in ".$patrons[$pno][1]."
"; + echo "
"; + // don't display start date if there is none + echo ($patrons[$pno][2]=="")?" ":"Einschreibestart Dienstag ".$patrons[$pno][2].""; + echo "
"; + echo " ".$keyData[$i][0].""; + echo "
"; + echo "
ESE-Evaluation unter https://ese.ifsr.de/2013/eva/
"; + echo "
"; + } +?> + + + diff --git a/patronGenTut.php b/patronGenTut.php new file mode 100644 index 0000000..0dec15d --- /dev/null +++ b/patronGenTut.php @@ -0,0 +1,51 @@ + + + + + + Namenspatronzettel + + + +
+
"; + echo "
Tutor
"; + echo "
 
"; + echo "
 
"; + echo " ".$keyData[$i][0].""; + echo "
"; + echo "
Tutoren-Eva unter https://ese.ifsr.de/2013/eva/tut
"; + echo "
"; + } +} +?> + + + diff --git a/questionnaires/student_questionnaire.txt b/questionnaires/student_questionnaire.txt new file mode 100644 index 0000000..79b58ee --- /dev/null +++ b/questionnaires/student_questionnaire.txt @@ -0,0 +1,62 @@ +# ESE Evaluation Questionnaire for Students +# ----------------------------------------------- +# Syntax: +# {id}; {type}; {parameters} +# +# {id} identifier for that entry. +# IMPORTANT: The id has to be UNIQUE for every entry +# {type} can be one of the following (including parameters): +# Headline = The headline that is displayed for the questionnaire. There should only be one header. +# Takes the text of the header a parameter +# TextBox = A text box where the student has to enter a value. +# Takes the label of the text box as a parameter +# Legend = The legend that describes the rating system. There should be at least on legend per form. +# Takes no parameters +# Question = A question that has to be answered by the student. +# Takes the question as a parameter. +# Comment = A box for comments (It is assumed there is only one such box) +# Takes the label of the comment box as a parameter. +# +# If fundamental changes are made (other than changing strings or adding/removing questions) +# The files 'student_questionnaire.php' and 'student_analysis' should be checked for validity, +# because they rely on some of the ids being present +#------------------------------------------------ + +# -- Header --- +headline; Headline; ESE 2013 + +# -- personal Code -- +# this is important and should stay so the student can identify himself to the system and receive his cup later on +code; TextBox; Persönlicher Code: + +# -- Name of the tutor -- +tutorName; TextBox; Wer war dein Namenspatron? (Nachname) + +# -- Legend -- +legend; Legend; + +# -- Begin Questions -- +tutorRating; Question; Wie fandest du das Tutorium? +meetingRating; Question; Wie hat dir der Kennenlernabend gefallen? +meetingSeminar; Question; Wie war das Seminargruppentreffen? +#speechMasterDiplom; Question; Wie war der Vortrag zum Master/Diplom? +#speechMicrosoft; Question; Wie war der Microsoft-(MSDNAA)-Vortrag? +paperChaseRating; Question; Wie fandest du die Schnitzeljagd? +clubbingRating; Question; Wie hat dir die Clubwanderung gefallen? +sppechCoditermination; Question; Wie war der Vortrag zur studentischen Mitbestimmung? +speechAbroadSemester; Question; Wie war der Vortrag zum Auslandsstudium? +speechTudias; Question; Wie war der Vortrag von TUDIAS? +eseGameRating; Question; Wie hat dir das ESE-Spiel gefallen? +eseGameEvening; Question; Wie fandest du den Spieleabend? +#movieNightRating; Question; Wie hat dir der Kino-Abend gefallen? +profIntroRating; Question; Wie war die Professorenvorstellung? +#bowlingNightRating; Question; Wie war der Billiard/Bowling-Abend für dich? +testRegisterRating; Question; Wie fandest du die Übungseinschreibung? +giftBags; Question; Wie fandest du die Tüten? +ZIH; Question; Wie hilfreich fandest du die ZIH-Broschüre? +noPanic; Question; Wie hat dir die NoPanic gefallen? +inetPresenceRating; Question; Beurteilung des Internet Auftritts +generalEseRating; Question; Was hältst du von der ESE allgemein? + +# -- Comments -- +comment; Comment; Kommentar:; diff --git a/questionnaires/tutor_questionnaire.txt b/questionnaires/tutor_questionnaire.txt new file mode 100644 index 0000000..3484aec --- /dev/null +++ b/questionnaires/tutor_questionnaire.txt @@ -0,0 +1,46 @@ + ESE Evaluation Questionnaire for Tutors +# ----------------------------------------------- +# Syntax: +# {id}; {type}; {parameters} +# +# {id} identifier for that entry. +# IMPORTANT: The id has to be UNIQUE for every entry +# {type} can be one of the following (including parameters): +# Headline = The headline that is displayed for the questionnaire. There should only be one header. +# Takes the text of the header a parameter +# TextBox = A text box where the student has to enter a value. +# Takes the label of the text box as a parameter +# Legend = The legend that describes the rating system. There should be at least on legend per form. +# Takes no parameters +# Question = A question that has to be answered by the student. +# Takes the question as a parameter. +# Comment = A box for comments (It is assumed there is only one such box) +# Takes the label of the comment box as a parameter. +# +# If fundamental changes are made (other than changing strings or adding/removing questions) +# The files 'student_questionnaire.php' and 'student_analysis' should be checked for validity, +# because they rely on some of the ids being present +#------------------------------------------------ + +# -- Header --- +headline; Headline; ESE 2013 + +# -- personal Code -- +# this is important and should stay so the student can identify himself to the system and receive his gift later on +code; TextBox; Persönlicher Code: + +# -- Legend -- +legend; Legend; + +# -- Begin Questions -- +planingRating; Question; Wie fandest du die Planung der ESE? +tutoriumPreparation; Question; Zufriedenheit mit Tutorien und deren Vorbereitung +paperChaseRating; Question; Wie fandest du die Schnitzeljagd? +eseGameRating; Question; Wie ist das ESE-Spiel gelaufen? +inetPresenceRating; Question; Beurteilung des Internet-Auftritts +communicationRating; Question; Zusammenarbeit und Kommunikation der Helfer +testRegisterRating; Question; Ablauf der Übungseinschreibung +generalEseRating; Question; Was hältst du von der ESE allgemein? + +# -- Comments -- +comment; Comment; Kommentar:; \ No newline at end of file diff --git a/tutorAnalysis.php b/tutorAnalysis.php new file mode 100644 index 0000000..a652368 --- /dev/null +++ b/tutorAnalysis.php @@ -0,0 +1,175 @@ + + + + + + ESE Evaluation Analyse + + + + +
+ 0) + { + CreateSectionHeader("Question Evaluation"); + CreateLegend(); + foreach ($questionData as $question) + { + CreateRowHeader(); + echo "
\n"; + // The question itself + echo "

" . $question[0]; + //average + echo "⌀" . + round( + ($question[1]+2*$question[2]+3*$question[3]+4*$question[4]+5*$question[5]) + /(array_sum(array_slice($question,1,5))), + 2) + . "\n"; + echo "

\n"; + echo "
\n"; + echo "
\n"; + echo "
\n"; + + $width = 800; + $height = 300; + + //find max of answers to set max of x-axis, max of y-axis is always seven, because there are six possibilities to answer + $values = $question; + array_shift($values); + $maxX = max($values)+1; + $maxY = 7; + + $img = CreateImage($width, $height); + + // the amount of answers for the different options and a nice group of bars + for ($i = 1; $i < 7; $i++) + { + echo "

" . $question[$i] . "

\n"; + $color = ImageColorAllocate($img, 255, 80+2*$question[$i], 0); + DrawBar($img, $question[$i], $maxX, $i+1, $maxY, $question[$i], $color); + } + + //finish image and save it + $caption = array("N/A","--","-", "0", "+", "++"); + DrawCoords($img, $maxX, $maxY, $caption); + + $file=str_replace("?", "", str_replace(" ", "", $question[0])); + + ImagePNG($img,"question".$file.".png"); + ImageDestroy($img); + + echo "
\n"; + echo "
\n"; + echo "
\n"; + echo "
\n"; + echo "
\n"; + echo " "; + echo "
\n"; + echo "
\n"; + } + } + // if there was any tutor Data in the log file, display it + if (count($tutorData) > 0) + { + CreateSectionHeader("Tutor Evaluation"); + CreateLegend(); + foreach ($tutorData as $tutorName => $tutor) + { + CreateRowHeader(); + echo "
\n"; + // the name of the tutor + echo "

" . $tutorName . "\n"; + + //average + echo "⌀" . + round( + ($tutor[0]+2*$tutor[1]+3*$tutor[2]+4*$tutor[3]+5*$tutor[4]) + /(array_sum($tutor)-$tutor[5]), 2) + . "\n"; + echo "

\n"; + + echo "
\n"; + echo "
\n"; + echo "
\n"; + + $width = 800; + $height = 300; + + //find max of answers to set max of x-axis, max of y-axis is always seven, because there are six possibilities to answer + $maxX = max($tutor)+1; + $maxY = 7; + + $img = CreateImage($width, $height); + + // the amount of answers for the different options and a picture + for ($i = 0; $i < 6; $i++) + { + echo "

" . $tutor[$i] . "

\n"; + $color = ImageColorAllocate($img, 255, 80+2*$tutor[$i], 0); + DrawBar($img, $tutor[$i], $maxX, $i+2, $maxY, $tutor[$i], $color); + } + + //finish image and save it + $caption = array("N/A","--","-", "0", "+", "++"); + DrawCoords($img, $maxX, $maxY, $caption); + + $file = str_replace(" ", "", $tutorName); + ImagePNG($img,"tutor".$file.".png"); + ImageDestroy($img); + + echo "
\n"; + echo "
\n"; + echo "
\n"; + echo "
\n"; + echo "
\n"; + echo " "; + echo "
\n"; + echo "\n"; + + } + } + // if there was any comment Data in the log file, display it + if (count($commentData) > 0) + { + CreateSectionHeader("Comments"); + foreach ($commentData as $comment) + // replace all new lines with html breaks to properly display multi-line comments + CreateParagraph(str_replace("\n", "
\n", $comment)); + } + ?> + + + \ No newline at end of file diff --git a/tutor_questionnaire.php b/tutor_questionnaire.php new file mode 100644 index 0000000..3e94efb --- /dev/null +++ b/tutor_questionnaire.php @@ -0,0 +1,100 @@ + + + + + + + ESE Evaluation für Studenten + + + + +
+
+ Bitte versuch es später nocheinmal oder wende dich an einen der Verantwortlichen."); + else + CreateKeyMessageBox($keyState); + CreateQuestionnaireElement("code", $questionnaire, $_POST); + CreateQuestionnaireElement("legend", $questionnaire, $_POST); + CreateAllQuestionElements($questionnaire, $_POST); + CreateQuestionnaireElement("comment", $questionnaire, $_POST); + ?> +
+ +
+
+
+ + + + \ No newline at end of file