summaryrefslogtreecommitdiffstats
path: root/theme
diff options
context:
space:
mode:
authorGravatar Gehad elrobey <gehadelrobey@gmail.com>2014-06-01 07:44:35 +0300
committerGravatar Dirk Hohndel <dirk@hohndel.org>2014-06-03 21:08:22 -0700
commitd8c46fbdb68341bd308bc48e9c3c1be7fbb70f92 (patch)
treea834f6884b8a0e235873174116d0dd8f4046343c /theme
parente21032c99b33ebb9b0067c9314595ae75030740f (diff)
downloadsubsurface-d8c46fbdb68341bd308bc48e9c3c1be7fbb70f92.tar.gz
HTML: Create theme directory
Create theme directory that contains the html templates copied to the exporting directory. - dive_export.html is the main html template. - light.css and sand.css are two separte themes. - list_lib.js is the main javascript library. Signed-off-by: Gehad elrobey <gehadelrobey@gmail.com> Signed-off-by: Miika Turkia <miika.turkia@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'theme')
-rw-r--r--theme/dive_export.html139
-rw-r--r--theme/light.css201
-rw-r--r--theme/list_lib.js577
-rw-r--r--theme/poster.pngbin0 -> 37876 bytes
-rw-r--r--theme/sand.css203
5 files changed, 1120 insertions, 0 deletions
diff --git a/theme/dive_export.html b/theme/dive_export.html
new file mode 100644
index 000000000..1c92d3a55
--- /dev/null
+++ b/theme/dive_export.html
@@ -0,0 +1,139 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>dive log export</title>
+<link rel="stylesheet" type="text/css" href="theme.css">
+<script src="file.json"></script>
+<script src="settings.json"></script>
+<script src="list_lib.js" type="text/javascript"></script>
+<script>
+//////////////////////////////////
+//advance settings window//
+
+var advanced_shown=false;
+function showdiv(){
+ var search = document.getElementById("advanced_search");
+ if(advanced_shown==false){
+ search.style.display='block';
+ advanced_shown=true;
+ }
+ else{
+ search.style.display='none';
+ advanced_shown=false;
+ }
+}
+function hideAdvanced(){
+ if(advanced_shown==false) return;
+ var search = document.getElementById("advanced_search");
+ search.style.display='none';
+ advanced_shown=false;
+}
+
+document.onclick=check;
+function check(e)
+{
+ var target = (e && e.target) || (event && event.srcElement);
+ var obj = document.getElementById('advanced_search');
+ var obj2 = document.getElementById('adv_srch_sp');
+ if(target!=obj && target!=obj2 && target.type!="checkbox"){
+ hideAdvanced();
+ }
+}
+
+////////////////////////////////
+
+function loadSettings(){
+ if(typeof settings === 'undefined')return;
+ document.body.style.fontSize=settings.fontSize;
+ document.body.style.fontFamily=settings.fontFamily;
+}
+
+var searchingModules = new Array();
+
+window.onload=function(){
+
+ //initialize settings
+ loadSettings();
+
+ //initializing default searchers
+ searchingModules["location"] = new SearchModule(true);
+ searchingModules["divemaster"] = new SearchModule(true);
+ searchingModules["buddy"] = new SearchModule(true);
+ searchingModules["notes"] = new SearchModule(true);
+ searchingModules["tags"] = new SearchModule(true);
+
+ getItems();
+
+ //initializing search words
+ for(var i=0;i<items.length;i++){
+ searchingModules["location"].Enter_search_string(items[i].location,i);
+
+ searchingModules["divemaster"].Enter_search_string(items[i].divemaster,i);
+
+ searchingModules["buddy"].Enter_search_string(items[i].buddy,i);
+
+ searchingModules["notes"].Enter_search_string(items[i].notes,i);
+
+ searchingModules["tags"].Enter_search_tag(items[i].tags,i);
+ }
+
+ sizeofpage=10;
+ showAllDives();
+}
+
+function changeAdvSearch(e){
+ searchingModules[e.value].enabled=e.checked;
+ SearchModules(document.getElementById("search_input").value);
+}
+
+</script>
+</head>
+<body>
+ <center>
+ <div id="header_container">
+ <div id="logo"></div>
+ <h1>Subsurface</h1>
+ </div>
+ </center>
+ <div id="divePanel">
+ <div id="controlbox">
+ <input id="search_input" oninput="SearchModules(this.value)" placeholder="search"/><a id="adv_srch_sp" onClick="showdiv()" >Advanced Search</a>
+ <div id="advanced_search">
+ <input type="checkbox" onchange="changeAdvSearch(this)" value="location" checked>Location<br>
+ <input type="checkbox" onchange="changeAdvSearch(this)" value="divemaster" checked>Divemaster<br>
+ <input type="checkbox" onchange="changeAdvSearch(this)" value="buddy" checked>Buddy<br>
+ <input type="checkbox" onchange="changeAdvSearch(this)" value="notes" checked>Notes<br>
+ <input type="checkbox" onchange="changeAdvSearch(this)" value="tags" checked>Tags<br>
+ </div>
+ <div id="toolbox">
+ <select id="no_dives_selector" onChange="setNumberOfDives(this)">
+ <option>10</option>
+ <option>20</option>
+ <option>50</option>
+ <option>100</option>
+ </select>
+ <button onClick="expandAll()"> Expand All </button>
+ <button onClick="collapseAll()"> Collapse All </button>
+ <button id="trip_button" onclick="toggleTrips();">trips</button>
+ </div>
+ </div>
+ <div id="header">
+ <div onClick="list_sort('1')" class="item">Number</div>
+ <div onClick="list_sort('2')" class="item">Date</div>
+ <div onClick="list_sort('3')" class="item">Time</div>
+ <div onClick="list_sort('6')" class="item_large">Location</div>
+ <div onClick="list_sort('4')" class="item">Air Temp</div>
+ <div onClick="list_sort('5')" class="item">Water Temp</div>
+ </div>
+ <div id="diveslist">
+ </div>
+ <center>
+ <div id="controller">
+ <button onClick="prev_page()"><-</button>
+ <span id="pagging"></span>
+ <button onClick="next_page()">-></button>
+ </div>
+ </center>
+ </div>
+</body>
+</html>
diff --git a/theme/light.css b/theme/light.css
new file mode 100644
index 000000000..589bbddda
--- /dev/null
+++ b/theme/light.css
@@ -0,0 +1,201 @@
+body{
+ min-width:680px;
+ background-color:#dfdfdf;
+ font-size:12px;
+ font-family: 'Lobster', helvetica, arial;
+}
+
+h1 {
+ text-align: center;
+ font-size: 70px;
+ margin-top: 0;
+ font-family: 'Lobster', helvetica, arial;
+ text-decoration: none;
+ color: #48697B;
+ padding-top:30px;
+}
+
+ul{
+ background-color:#7899AB;
+}
+
+table{
+ margin:10px;
+ font-size:inherit;
+}
+
+tr{
+ padding:6px;
+}
+
+th{
+ padding:4px;
+}
+
+.trips{
+ background-color:#5A7F9A;
+}
+
+.words{
+ font-size:inherit;
+ font-weight:bold;
+}
+
+.item{
+ width:9%;
+ min-width:82px;
+ max-width:250px;
+ float:left;
+ cursor:pointer;
+ overflow:hidden;
+ text-overflow:ellipsis;
+ white-space: nowrap;
+}
+
+.item_large{
+ width:16%;
+ min-width:200px;
+ max-width:385px;
+ margin-right:8px;
+ float:left;
+ cursor:pointer;
+ overflow:hidden;
+ text-overflow:ellipsis;
+ white-space: nowrap;
+}
+
+#logo{
+ width: 150px;
+ height: 150px;
+ background-image: url("poster.png");
+ background-size: 150px 150px;
+ background-repeat: no-repeat;
+ float:left;
+}
+
+#header_container{
+ width:600px;
+ height:auto;
+ margin:50px;
+ margin-bottom:100px;
+}
+
+
+
+ul,#header{
+ border-style:solid;
+ border-radius:14px;
+ border-color:#7899AB;
+ margin:7px;
+ padding:5px 10px 5px 10px;
+}
+
+input[type=checkbox]{
+ height:27;
+ width:27;
+ margin:4px;
+}
+
+#advanced_search{
+ position: absolute;
+ box-shadow: 1px 1px 5px #888888;
+ z-index: 99;
+ width: 300px;
+ max-width: 30%;
+ min-width: 270px;
+ background-color: rgba(105,126,131,0.8);
+ font-size:16px;
+ color:white;
+ display:none;
+ max-height:40%;
+ overflow:scroll;
+ overflow-y:auto;
+ overflow-x:hidden;
+}
+
+#toolbox{
+ float:right;
+ height:35px;
+ overflow:hidden;
+ display:block;
+}
+
+#header{
+ height:20px;
+ background-color:#5f7f8f;
+ border-color:#5f7f8f;
+ font-weight:bold;
+}
+
+
+#controller{
+ min-width:200px;
+ padding:10px;
+}
+
+#divePanel{
+ padding:5px;
+ width:90%;
+ margin:0% 5% 0% 5%;
+ margin-bottom:50px;
+ background-color: rgba(88,121,139,0.3);
+ box-shadow: 10px 10px 5px #888888;
+}
+
+button,#no_dives_selector{
+ font-size:13px;
+ min-width:55px;
+ line-height:2;
+ margin:0px 0px 0px 0px;
+ border-radius:10px;
+ opacity:0.6;
+ border-style:outset;
+ border-color:black;
+}
+
+#no_dives_selector{
+ padding:5px;
+ text-indent: 0.01px;
+ text-overflow: '';
+}
+
+button:hover{
+ background-color:#4A5F5F;
+}
+
+a:hover{
+ cursor: pointer;
+ text-decoration:underline;
+}
+
+ul:hover{
+ background-color:#88A9BB;
+}
+
+#search_res{
+ font-size:0.6em;
+ visibility:hidden;
+}
+
+#search_input{
+ border-radius:6px;
+ max-width:30%;
+ padding:3px;
+ opacity:0.6;
+ margin: 0px 5px 5px 5px;
+ border-style:outset;
+ border-color:black;
+}
+
+#controlbox{
+ margin:7px;
+ margin-bottom:10px;
+}
+
+@media (max-width: 768px) {
+ #divePanel{
+ padding:4px;
+ width:100%;
+ margin:0% 0% 0% 0%;
+ }
+}
diff --git a/theme/list_lib.js b/theme/list_lib.js
new file mode 100644
index 000000000..1a07dc384
--- /dev/null
+++ b/theme/list_lib.js
@@ -0,0 +1,577 @@
+var itemsToShow = new Array(); //list of indexes to all dives to view
+var items = new Array();
+var start; //index of first element viewed in itemsToShow
+var sizeofpage; //size of viewed page
+var numberofwords=0; //just for stats
+var olditemstoshow; //to reference the indexes to all dives if changed
+//////////////////////////////////
+// //
+// View Model //
+// //
+//////////////////////////////////
+
+/**
+*This Method view all items
+*View N pages each of sizeofpage size items.
+*starting from zero
+*/
+function showAllDives(){
+ for(var i=0 ; i < items.length ; i++){
+ itemsToShow.push(i);
+ }
+ olditemstoshow = itemsToShow;
+ start=0;
+ viewInPage();
+}
+
+/**
+*This function view the 'itemstoshow' in pages.
+*It start from 'start' variable.
+*It showes N pages each of sizeofpage size.
+*/
+function viewInPage(){
+ var end = start + sizeofpage -1;
+ if(end >= itemsToShow.length ) end = itemsToShow.length-1;
+ updateView(start,end);
+}
+
+/**
+*addHTML this Method puts the HTML of items of given indexes
+*@param {array} indexes array of indexes to put in HTML
+*/
+function updateView(start,end){
+ var divelist = document.getElementById('diveslist');
+ divelist.innerHTML="";
+ for(var i=start;i<=end;i++){
+ divelist.innerHTML+='<ul id="'+itemsToShow[i]+'" onclick="toggleExpantion(this)"</ul>';
+ expand(document.getElementById(itemsToShow[i]));
+ items[itemsToShow[i]].expanded = true;
+ };
+ view_pagging(start,end);
+}
+
+/**
+*addHTML this Method puts the HTML of items of given indexes
+*@param {array} indexes array of indexes to put in HTML
+*/
+function addHTML(indexes){
+ var divelist = document.getElementById('diveslist');
+ divelist.innerHTML="";
+ for(var i=0;i<indexes.length;i++){
+ divelist.innerHTML+='<ul id="'+indexes[i]+'" onclick="toggleExpantion(this)"</ul>';
+ expand(document.getElementById(indexes[i]));
+ itemsToShow[indexes[i]].expanded = true;
+ };
+}
+
+/**
+*This Method shows items in a range [start,end]
+*@param {integer} start start from this index
+*@param {integer} finish at this index.
+*/
+function view_in_range(start,end){
+ var ind = new Array();
+ if(end>=itemsToShow.length)end=itemsToShow.length-1;
+ for(var i=start ; i <= end ; i++){
+ ind.push(i);
+ }
+ addHTML(ind);
+ view_pagging(start,end);
+}
+
+
+function prev_page(){
+ var end = start+sizeofpage-1;
+ if(start-sizeofpage>0){
+ start-=sizeofpage;
+ }
+ else{
+ start=0;
+ }
+ if(end-sizeofpage>0){
+ end-=sizeofpage;
+ }
+ if(end>=itemsToShow.length){
+ end = itemsToShow.length-1;
+ }
+ updateView(start,end)
+}
+
+function next_page(){
+ var end = start+sizeofpage-1;
+ if(end+sizeofpage<itemsToShow.length){
+ end+=sizeofpage;
+ }
+ else{
+ end=itemsToShow.length-1;
+ }
+ if(start+sizeofpage<itemsToShow.length){
+ start+=sizeofpage;
+ }
+ updateView(start,end)
+}
+
+///////////////////////////////////////////////
+
+function view_pagging(start,end){
+ var page = document.getElementById("pagging");
+ page.innerHTML= (start+1)+' to '+(end+1) + ' of '+ (itemsToShow.length) +' dives';
+}
+
+function expandAll(){
+ for(var i=start;i<start+sizeofpage;i++){
+ if(i>=itemsToShow.length) break;
+ unexpand(document.getElementById(itemsToShow[i]));
+ items[itemsToShow[i]].expanded = false;
+ }
+}
+
+function collapseAll(){
+ for(var i=start;i<start+sizeofpage;i++){
+ if(i>=itemsToShow.length) break;
+ expand(document.getElementById(itemsToShow[i]));
+ items[itemsToShow[i]].expanded = true;
+ }
+}
+
+function setNumberOfDives(e){
+ var value = e.options[e.selectedIndex].value;
+ sizeofpage=parseInt(value);
+ var end = start + sizeofpage -1;
+ view_in_range(start,end);
+}
+
+function toggleExpantion(ul){
+ if(!items[ul.id].expanded)
+ {
+ expand(ul);
+ items[ul.id].expanded = true;
+ }
+ else
+ {
+ unexpand(ul);
+ items[ul.id].expanded = false;
+ }
+}
+
+function expand(ul){
+ ul.innerHTML = getlimited(items[ul.id]);
+ ul.style.padding='2px 10px 2px 10px';
+}
+function unexpand(ul){
+ ul.innerHTML = getExpanded(items[ul.id]);
+ ul.style.padding='3px 10px 3px 10px';
+}
+
+///////////////////////////////////////
+//
+// Dive Model
+//
+//////////////////////////////////////
+
+function getlimited (dive) {
+ return '<div style="height:20px"><div class="item">'+dive.subsurface_number+'</div>'+
+ '<div class="item">'+dive.date+'</div>'+
+ '<div class="item">'+dive.time+'</div>'+
+ '<div class="item_large">'+dive.location+'</div>'+
+ '<div class="item">'+dive.temperature.air+'</div>'+
+ '<div class="item">'+dive.temperature.water+'</div></div>';
+};
+
+function getExpanded (dive) {
+ return '<table><tr><td class="words">Date: </td><td>'+dive.date+
+ '</td><td class="words">&nbsp&nbsp&nbsp&nbsp&nbspTime: </td><td>'+dive.time +
+ '</td><td class="words">&nbsp&nbsp&nbsp&nbsp&nbspLocation: </td><td>'+'<a onclick=\"Search_list_Modules(\''+dive.location+'\')\">'
+ +dive.location +'</a>'+
+ '</td></tr></table><table><tr><td class="words">Rating:</td><td>'+putRating(dive.rating)+
+ '</td><td class="words">&nbsp&nbsp&nbspVisibilty:</td><td>'+putRating(dive.visibility)+
+ '</td></tr></table>'+
+ '<table><tr><td class="words">Air temp: </td><td>'+dive.temperature.air+
+ '</td><td class="words">&nbsp&nbsp&nbsp&nbspWater temp: </td><td>'+dive.temperature.water +
+ '</td></tr></table><table><tr><td class="words">DiveMaster: </td><td>'+dive.divemaster +
+ '</td></tr><tr><td class="words"><p>Buddy: </p></td><td>'+dive.buddy +
+ '</td></tr><tr><td class="words">Suit: </td><td>'+dive.suit +
+ '</td></tr><tr><td class="words">Tags: </td><td>'+putTags(dive.tags)+
+ '</td></tr></table><div style="margin:10px;"><p class="words">Notes: </p>' + dive.notes +'</div>';
+};
+
+function putTags(tags){
+ var result="";
+ for(var i in tags){
+ result+='<a onclick=\"Search_list_Modules(\''+tags[i]+'\')\">'+tags[i]+'</a>';
+ if(i<tags.length-1)
+ result+=', ';
+ }
+ return result;
+}
+
+function putRating(rating){
+ var result;
+ result='<div>';
+ for(var i=0;i<rating;i++)
+ result+=' &#9733; ';
+ for(var i=rating;i<5;i++)
+ result+=' &#9734; ';
+ result+='</div>';
+ return result;
+}
+
+///////////////////////////////////////
+//
+// Sorting
+//
+/////////////////////////////////////
+
+/*
+this variables keep the state of
+each col. sorted asc or des
+*/
+var number = true;
+var time = true;
+var date = true;
+var air = true;
+var water = true;
+var locat = true;
+
+function list_sort(sortOn){
+ switch(sortOn){
+ case '1' ://number
+ if(number){
+ sort_it(sortOn,cmpNumAsc);
+ number = 1 - number;
+ }
+ else{
+ sort_it(sortOn,cmpNumDes);
+ number = 1 - number;
+ }
+ break;
+ case '2' ://date
+ if(date){
+ sort_it(sortOn,cmpDateAsc);
+ date = 1 - date;
+ }
+ else{
+ sort_it(sortOn,cmpDateDes);
+ date = 1 - date;
+ }
+ break;
+ case '3'://time
+ if(time){
+ sort_it(sortOn,cmpTimeDes);
+ time = 1 - time;
+ }
+ else{
+ sort_it(sortOn,cmpTimeAsc);
+ time = 1 - time;
+ }
+ break;
+ case '4'://Air temp
+ if(air){
+ sort_it(sortOn,cmpAtempDes);
+ air = 1 - air;
+ }
+ else{
+ sort_it(sortOn,cmpAtempAsc);
+ air = 1 - air;
+ }
+ break;
+ case '5'://Water temp
+ if(water){
+ sort_it(sortOn,cmpWtempDes);
+ water = 1 - water;
+ }
+ else{
+ sort_it(sortOn,cmpWtempAsc);
+ water = 1 - water;
+ }
+ break;
+ case '6'://Water temp
+ if(locat){
+ sort_it(sortOn,cmpLocationDes);
+ locat = 1 - locat;
+ }
+ else{
+ sort_it(sortOn,cmpLocationAsc);
+ locat = 1 - locat;
+ }
+ break;
+ }
+}
+
+function cmpLocationAsc(j,iSmaller){
+ return items[j].location < items[iSmaller].location ;
+}
+
+function cmpLocationDes(j,iSmaller){
+ return items[j].location > items[iSmaller].location ;
+}
+
+function cmpNumAsc(j,iSmaller){
+ return items[j].subsurface_number < items[iSmaller].subsurface_number ;
+}
+function cmpNumDes(j,iSmaller){
+ return items[j].subsurface_number > items[iSmaller].subsurface_number ;
+}
+function cmpTimeAsc(j,iSmaller){
+ return items[j].time < items[iSmaller].time ;
+}
+function cmpTimeDes(j,iSmaller){
+ return items[j].time > items[iSmaller].time ;
+}
+function cmpDateAsc(j,iSmaller){
+ return items[j].date < items[iSmaller].date ;
+}
+function cmpDateDes(j,iSmaller){
+ return items[j].date > items[iSmaller].date ;
+}
+function cmpAtempAsc(j,iSmaller){
+ return parseInt(items[j].temperature.air) < parseInt(items[iSmaller].temperature.air) ;
+}
+function cmpAtempDes(j,iSmaller){
+ return parseInt(items[j].temperature.air) > parseInt(items[iSmaller].temperature.air) ;
+}
+function cmpWtempAsc(j,iSmaller){
+ return parseInt(items[j].temperature.water) < parseInt(items[iSmaller].temperature.water) ;
+}
+function cmpWtempDes(j,iSmaller){
+ return parseInt(items[j].temperature.water) > parseInt(items[iSmaller].temperature.water) ;
+}
+
+function sort_it(sortOn,function_){
+ var res = new Array();
+ var visited = new Array(itemsToShow.length);
+ for(var j=0;j<itemsToShow.length;j++){
+ visited[j]=0;
+ }
+ for(var i=0;i< itemsToShow.length ;i++){
+ for(var j=0;j<itemsToShow.length;j++)
+ if(visited[j] == false)
+ var iSmaller=j;
+ for(var j=0;j<itemsToShow.length;j++){
+ if(function_(itemsToShow[j],itemsToShow[iSmaller])){
+ if(visited[j] == false){
+ iSmaller = j;
+ }
+ }
+ }
+ visited[iSmaller] = true;
+ res.push(itemsToShow[iSmaller]);
+ }
+ itemsToShow = res;
+ start=0;
+ viewInPage();
+}
+
+///////////////////////////////////////
+//
+// Searching
+//
+//////////////////////////////////////
+function Set(){
+ this.keys = new Array();
+}
+
+Set.prototype.contains = function(key){
+ return (this.keys.indexOf(key) >= 0) ? true : false;
+}
+
+Set.prototype.push = function(key) {
+ if(!this.contains(key)){
+ this.keys.push(key);
+ }
+};
+
+Set.prototype.isEmpty = function() {
+ return this.keys.length<=0? true:false;
+};
+
+Set.prototype.forEach = function(do_){
+ this.keys.forEach(do_);
+};
+
+Set.prototype.Union = function(another_set){
+ if (another_set == null) {
+ return;
+ }
+ for(var i=0; i<another_set.keys.length ;i++){
+ this.push(another_set.keys[i]);
+ };
+};
+
+////////////////////////////////////////
+
+function Node(value){
+ this.children = new Array();
+ this.value=value;
+ this.key= new Set();
+}
+///////////////////////////////////////
+function Search_list_Modules(searchfor){
+ document.getElementById("search_input").value=searchfor;
+ SearchModules(searchfor);
+}
+
+function SearchModules(searchfor){
+ var resultKeys = new Set();//set
+
+ if(searchfor.length<=0){
+ //exit searching mode
+ document.getElementById("search_input").style.borderColor="initial";
+ start=0;
+ itemsToShow=olditemstoshow;
+ viewInPage();
+ return;
+ }
+
+ searchingModules.forEach(function(x){
+ resultKeys.Union(x.search(searchfor));
+ });
+
+ if(searchingModules["location"].enabled==true)
+ resultKeys.Union(searchingModules["location"].search(searchfor));
+
+ if(searchingModules["divemaster"].enabled==true)
+ resultKeys.Union(searchingModules["divemaster"].search(searchfor));
+
+ if(searchingModules["buddy"].enabled==true)
+ resultKeys.Union(searchingModules["buddy"].search(searchfor));
+
+ if(searchingModules["notes"].enabled==true)
+ resultKeys.Union(searchingModules["notes"].search(searchfor));
+
+ if(searchingModules["tags"].enabled==true)
+ resultKeys.Union(searchingModules["tags"].search(searchfor));
+
+ if(resultKeys.isEmpty()){
+ //didn't find keys
+ document.getElementById("search_input").style.borderColor="red";
+ itemsToShow=[];
+ viewInPage();
+
+ return;
+ }
+ //found keys
+ document.getElementById("search_input").style.borderColor="initial";
+ itemsToShow = resultKeys.keys;
+ start=0;
+ viewInPage();
+}
+///////////////////////////////////////
+function SearchModule(enabled){
+ this.head = new Node();
+ this.enabled=enabled;
+}
+
+SearchModule.prototype.Enter_search_string = function(str,diveno){
+ if(str==""||!str) return;
+ var res = str.toLowerCase().split(" ");
+ for(var i=0;i<res.length;i++){
+ insertIn(res[i],diveno,this.head);
+ numberofwords++;
+ }
+}
+
+SearchModule.prototype.Enter_search_tag = function(tags,diveno){
+ if(!tags) return;
+ for(var i=0;i<tags.length;i++){
+ insertIn(tags[i],diveno,this.head);
+ numberofwords++;
+ }
+}
+
+SearchModule.prototype.search = function(x){
+ return searchin(x.toLowerCase(),this.head);
+}
+////////////////////////////////////////
+
+function insertIn(value,key,node){
+ node.key.push(key);
+ if(value.length<=0) return;
+
+ var this_char = value[0];
+ value = value.substring(1,value.length);
+
+ var i;
+ for(i =0;i<node.children.length;i++){
+ if(node.children[i].value==this_char){
+ return insertIn(value,key,node.children[i]);
+ }
+ }
+ node.children[i] = new Node(this_char);
+ insertIn(value,key,node.children[i]);
+}
+
+function searchin(value,node){
+ if(value.length<=0 || node.children.length <= 0) return node.key;
+
+ var this_char = value[0];
+ value = value.substring(1,value.length);
+
+ for(var i =0;i<node.children.length;i++){
+ if(node.children[i].value[0]==this_char){
+ return searchin(value,node.children[i]);
+ }
+ }
+ return null;
+}
+
+//trips
+
+var tripsShown;
+
+function toggleTrips(){
+ var trip_button = document.getElementById('trip_button');
+ if(tripsShown){
+ tripsShown=false;
+ trip_button.style.backgroundColor="#dfdfdf";
+ viewInPage();
+ }else{
+ showtrips();
+ trip_button.style.backgroundColor="#5f7f8f";
+ tripsShown=true;
+ }
+}
+
+function showtrips(){
+ var divelist = document.getElementById('diveslist');
+ divelist.innerHTML="";
+ for(var i=0;i<trips.length;i++){
+ divelist.innerHTML+='<ul id="trip_'+i+'" class="trips" onclick="toggle_trip_expansion('+i+')">'
+ +trips[i].name+' ( '+trips[i].dives.length+' dives)'+'</ul>'+'<div id="trip_dive_list_'+i+'"></div>';
+ };
+ for(var i=0;i<trips.length;i++){
+ unexpand_trip(i);
+ }
+}
+
+function toggle_trip_expansion(trip){
+ if(trips[trip].expanded ==true){
+ unexpand_trip(trip);
+ }else{
+ expand_trip(trip);
+ }
+}
+
+function expand_trip(trip){
+ trips[trip].expanded = true;
+ var d = document.getElementById("trip_dive_list_"+trip);
+ for(var j in trips[trip].dives){
+ d.innerHTML+='<ul id="'+trips[trip].dives[j].number+'" onclick="toggleExpantion(this)" onmouseover="highlight(this)"'+
+ ' onmouseout="unhighlight(this)">'+getlimited(trips[trip].dives[j])+'</ul>';
+ }
+}
+
+function unexpand_trip(trip){
+ trips[trip].expanded = false;
+ var d = document.getElementById("trip_dive_list_"+trip);
+ d.innerHTML='';
+}
+
+function getItems(){
+ var count = 0;
+ for(var i in trips){
+ for(var j in trips[i].dives){
+ items[count++]=trips[i].dives[j];
+ }
+ }
+}
diff --git a/theme/poster.png b/theme/poster.png
new file mode 100644
index 000000000..bd82ef7b9
--- /dev/null
+++ b/theme/poster.png
Binary files differ
diff --git a/theme/sand.css b/theme/sand.css
new file mode 100644
index 000000000..0bfcf66c1
--- /dev/null
+++ b/theme/sand.css
@@ -0,0 +1,203 @@
+body{
+ min-width:680px;
+ background-color:#F7F4DD;
+ font-size:12px;
+ font-family: 'Lobster', helvetica, arial;
+}
+
+h1 {
+ text-align: center;
+ font-size: 70px;
+ margin-top: 0;
+ font-family: 'Lobster', helvetica, arial;
+ text-decoration: none;
+ color: #213394;
+ padding-top:30px;
+}
+
+ul{
+ background-color:#FFD18F;
+}
+
+table{
+ margin:10px;
+ font-size:inherit;
+}
+
+tr{
+ padding:6px;
+}
+
+th{
+ padding:4px;
+}
+
+.trips{
+ background-color:#EFC15F;
+}
+
+.words{
+ font-size:inherit;
+ font-weight:bold;
+}
+
+.item{
+ width:9%;
+ min-width:82px;
+ max-width:250px;
+ float:left;
+ cursor:pointer;
+ overflow:hidden;
+ text-overflow:ellipsis;
+ white-space: nowrap;
+}
+
+.item_large{
+ width:16%;
+ min-width:200px;
+ max-width:385px;
+ margin-right:8px;
+ float:left;
+ cursor:pointer;
+ overflow:hidden;
+ text-overflow:ellipsis;
+ white-space: nowrap;
+}
+
+#logo{
+ width: 150px;
+ height: 150px;
+ background-image: url("poster.png");
+ background-size: 150px 150px;
+ background-repeat: no-repeat;
+ float:left;
+}
+
+#header_container{
+ width:600px;
+ height:auto;
+ margin:50px;
+ margin-bottom:100px;
+}
+
+
+
+ul,#header{
+ border-style:solid;
+ border-radius:14px;
+ border-color: #F30;
+ margin:7px;
+ padding:5px 10px 5px 10px;
+ border-width: 1px;
+}
+
+input[type=checkbox]{
+ height:27;
+ width:27;
+ margin:4px;
+}
+
+#advanced_search{
+ position: absolute;
+ box-shadow: 1px 1px 5px #F30;
+ z-index: 99;
+ width: 300px;
+ max-width: 30%;
+ min-width: 270px;
+ background-color:rgba(239,193,127,0.87);
+ font-size:16px;
+ display:none;
+ max-height:40%;
+ overflow:scroll;
+ overflow-y:auto;
+ overflow-x:hidden;
+}
+
+#toolbox{
+ float:right;
+ height:35px;
+ overflow:hidden;
+ display:block;
+}
+
+#header{
+ height:20px;
+ background-color:#EFC15F;
+ font-weight:bold;
+}
+
+
+#controller{
+ min-width:200px;
+ padding:10px;
+}
+
+#divePanel{
+ padding:5px;
+ width:90%;
+ margin:0% 5% 0% 5%;
+ margin-bottom:50px;
+ background-color:rgba(253, 195, 141, 0.43);
+ box-shadow: 7px 7px 5px rgba(215, 107, 27, 0.43);
+}
+
+button,#no_dives_selector{
+ font-size:13px;
+ min-width:55px;
+ line-height:2;
+ margin:0px 0px 0px 0px;
+ border-radius:10px;
+ opacity:0.6;
+ border-style:outset;
+ border-color: #F30;
+ background-color:#F7F4DD;
+ border-width: 1px;
+ color:#111354;
+}
+
+#no_dives_selector{
+ padding:5px;
+ text-indent: 0.01px;
+ text-overflow: '';
+}
+
+button:hover{
+ background-color:#EFC17F;
+}
+
+a:hover{
+ cursor: pointer;
+ text-decoration:underline;
+}
+
+ul:hover{
+ background-color:#EFC17F;
+}
+
+#search_res{
+ font-size:0.6em;
+ visibility:hidden;
+}
+
+#search_input{
+ border-radius:6px;
+ max-width:30%;
+ padding:3px;
+ opacity:0.6;
+ margin: 0px 5px 5px 5px;
+ border-style:outset;
+ border-color:black;
+}
+
+#controlbox{
+ margin:7px;
+ margin-bottom:10px;
+}
+
+@media (max-width: 768px) {
+ #divePanel{
+ padding:4px;
+ width:100%;
+ margin:0% 0% 0% 0%;
+ }
+}