# Admintool
### Software:
* ```ubuntu /14.04.1```
* ```nginx /1.4.6```

### Dependecies:
* ```jQuery /2.2.2```
* ```bootstrap /3.3.6```
* ```amivaccess /1.0```

### File Structure:
* admin (Admintool)
	* lib (Libraries)
		* bootstrap
		* jquery
		* amiv (amivcore)
		* cust (custom files)
			* main.js (our js file)
			* main.css (our css file)
	* res (Resources)
		* bg (big pictures and backgrounds)
		* favicon
		* fonts
		* logo
	* tools (tools)
		* main.tool
		* users.tool
		* ...
* public (Website)

## Library ```tools```:
The JS library ```tools``` is the backbone of the single tools. It enables the tool itself to take actions, such as store data, customize the menu, spawn alert boxes, load new tools and more.

### log(msg, type, timeout)
###### Displays an alert box to the user.
* ```msg /text,HTML``` The message or html to be displayed in the alert box
* ```type /('s', 'i', 'w', 'e')``` Specifies the type of message. Displays different colors for each type.
	* s: success
	* i: information
	* w: warning
	* e: error
* ```timeout /int (optional)``` Number of milliseconds that the message will be displayed. If not specified the default time is 5s, or 5000ms.

##### Example:
* ``` tools.log('User updated!', 's'); ``` Creates a green alert box with the message specified that will disappear after 5000ms.
* ``` tools.log('Error!', 'e', 10000); ``` Creates a gred alert box with the message specified that will disappear after 10s.

### modal(data)
###### Spwans a BS modal.
* ```data /js object``` Object containning the infos
	* ```head /text, HTML (optional)``` Sets the modal title.
	* ```body /text, HTML (optional)``` Sets the modal body.
	* ```button /object (optional)``` Buttons in the footer. (Multiple allowed!! :D)
		* ```type /string (optional)``` Type of boostrap button
			* primary
			* success
			* info
			* warning
			* danger
			* link
		* ```close /bool (optional)``` Close modal on click
		* ```callback /function (optional)``` Callback for the button
	* ```cancel /function (optional)``` Function called on cancel or modal is closed.

##### Example:
```javascript
tools.modal(); 
//Creates an empty modal.

tools.modal({
	head: 'Download Flash Player!!',
	body: 'Your browser needs this super important plugin',
	button: {
		'DOWNLOAD!':{
			type: 'success',
			close: true,
			callback: function(){
				some.nasty.virusdownload.now();
			}
		},
	},	
	cancel: function(){
		console.log('No Virus for you -.-');
	}
});
// Makes a modal to download stuff
```
### getTool(tool)
###### Loads the specified tool. If no tool is specified the tool in the navigaton bar (hashtag) will be chosen.
* ```tool /text (optional)``` Specifies the tool.

##### Example:
* ``` tools.getTool('home'); ``` Will get the /res/tools/```home```.tool and loads it into the site.

### ui
###### The ```ui``` element allows you to access ui components (menu) and take actions (login, logout, toggleSideMenu).

#### toggleSideMenu()
##### Example:
* ```tools.ui.toggleSideMenu();``` Toggles the sidebar.

#### menu(object)
###### Allows a tool to access the top menu and have custom links and callbacks.
* ```object /js object``` Menu structured element from which the menu is generated.
	* ```link /link (optional)``` HTTP link or hash. If left empty the link is disabled.
	* ```callback /function (optional)``` The function that is called if the link is pressed.

##### Example:
```javascript
tools.ui.menu({
	'Foo':{}
});
// Creates a single link element named 'Foo' without a href or callback

tools.ui.menu({
	'Foo':{
		link:'google.com'
	}
});
// Creates a link named 'Foo' without a callback, but is linked to google.com

tools.ui.menu({
	'Foo':{
		callback: function (){
			console.log('I was pressed!!');
		}
	}
});
// Creates a link 'Foo' and calles the function once the link is called

tools.ui.menu({
	'Foo':{
		link: '#trololo',
		callback: function (){
			console.log('I was pressed!!');
		}
	}
});
// Creates a link 'Foo' and calles the function once the link is called and the user gets redirected to #trololo.
```


### mem.local & mem.session
###### The mem element can store data for the tools, used for multiple cases. There are 2 tyoes of storage: ```local``` hast no expiration and ```session``` is stored until you close the window or tab. Every tool has separated storage, so you don't need to worry about conflicting with other tools. The subfunctions are the same, a so only ```session``` wil be demonstraded here. local works identically.

#### set(name, value)
###### Sets and stores a value. If the value already exists it will be overwritten!
* ```name /text``` Name of the 'variable'.
*  ```value /any``` The data to be stored. Can be any valid JS data, object, etc.

##### Example:
* ```tools.mem.session.set('currentUser', 'Sir Anon');``` Stores 'Sir Anon' in 'currentUser'.
* ```tools.mem.session.set('someData', {'car':'tesla'});``` Stores the object in 'someData'.

#### get(name)
###### Returnes the assosiated value. If there is no data it will return ```null```.
* ```name /text``` Name of the 'variable'.

##### Example:
* ```tools.mem.session.get('currentUser'); > 'Sir Anon'``` Retrieves 'currentUser'.
* ```tools.mem.session.set('someData'); > {'car':'tesla'}``` Retrieves 'someData'.
* ```tools.mem.session.set('nopeFoo'); > null``` No data stored unter 'nopeFoo', so returns ```null```.


# Website