commit ca0216c0c68cf81717dafd0eb83b0db5fccb1e15 Author: Lucas Woltmann Date: Tue Jul 8 20:14:37 2014 +0200 first commit 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 0000000..90814f2 Binary files /dev/null and b/css/ese-logo.png differ 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