// ***************************
// Ikeris Useful Functions
// ***************************

// Add, remove event
function fixEvent(event){
	event.preventDefault = fixEvent.preventDefault;
	event.stopPropagation = fixEvent.stopPropagation;
	return event;
}
fixEvent.preventDefault = function(){
	this.returnValue = false;
};
fixEvent.stopPropagation = function(){
	this.cancelBubble = true;
};
function handleEvent(event){
	event = event || fixEvent(window.event);
	var returnValue = true;
	var handlers = this.events[event.type];

	for (var i in handlers){
		if (!Object.prototype[i]){
			this.$$handler = handlers[i];
			if (this.$$handler(event) === false) { returnValue = false; }
		}
	}
	if (this.$$handler) { this.$$handler = null; }
	return returnValue;
}
function addEvent(element, type, handler){
	if (element.addEventListener){ element.addEventListener(type, handler, false); }
	else {
		if (!handler.$$guid) { handler.$$guid = addEvent.guid++; }
		if (!element.events) { element.events = {}; }
		var handlers = element.events[type];
		if (!handlers){
			handlers = element.events[type] = {};
			if (element['on' + type]) { handlers[0] = element['on' + type]; }
			element['on' + type] = handleEvent;
		}
		handlers[handler.$$guid] = handler;
	}
}
addEvent.guid = 1;

function removeEvent(element, type, handler){
	if (element.removeEventListener){ element.removeEventListener(type, handler, false); }
	else if (element.events && element.events[type] && handler.$$guid){
		delete element.events[type][handler.$$guid];
	}
}

// This little snippet fixes the problem that the onload attribute on the body-element will overwrite
// previous attached events on the window object for the onload event
if (!window.addEventListener){
	document.onreadystatechange = function(){
		if (window.onload && window.onload != handleEvent){
			addEvent(window, 'load', window.onload);
			window.onload = handleEvent;
		}
	};
}

// Cross browser detect internet browser name and version
var Browser = {
	userAgent : navigator.userAgent,
	appName : navigator.appName,

	IE : !!(window.attachEvent && !window.opera),
	OP : !!window.opera,
	FF : navigator.userAgent.indexOf("Gecko") > -1 && navigator.userAgent.indexOf("KHTML") == (-1) && navigator.userAgent.indexOf("Firefox") > 0,
	NN : navigator.appName == "Netscape",
	SF : navigator.userAgent.indexOf("Safari") > 0,
	Gecko : navigator.userAgent.indexOf("Gecko") > -1 && navigator.userAgent.indexOf("KHTML") == (-1),

	// Get name
	getBrowserName : function() {
		if(this.IE) { return "IE"; }
		else if(this.OP) { return "OP"; }
		else if(this.FF) { return "FF"; }
		else if(this.SF) { return "SF"; }
		else if(this.Gecko) { return "GK"; }
		return false;
	},
	// IE version
	getIEVersion : function() {
		if(this.IE) {
			var IEVer = this.userAgent.substring(this.userAgent.indexOf("MSIE ", 0));
			IEVer = IEVer.substring(5, IEVer.indexOf(";"));
			return(parseFloat(IEVer));
		} else {
			return false;
		}
	}
};

// getElementById returns incorrect objects in IE and Opera
// fix both IE and Opera (adjust when they implement this method properly)
// http://www.sixteensmallstones.org/ie-javascript-bugs-overriding-internet-explorers-documentgetelementbyid-to-be-w3c-compliant-exposes-an-additional-bug-in-getattributes
if((this.Browser.getBrowserName() == 'OP') || (this.Browser.getBrowserName() == 'IE')){
	document.nativeGetElementById = document.getElementById;
	document.getElementById = function(id){
		var elem = document.nativeGetElementById(id);
		if(elem){
			//make sure that it is a valid match on id
			if(elem.attributes.id.value == id){
				return elem;
			}
			else{
				//otherwise find the correct element
				for(var i=1;i<document.all[id].length;i++){
					if(document.all[id][i].attributes.id.value == id){
						return document.all[id][i];
					}
				}
			}
		}
		return null;
	};
}
// ***************************
// ** Some useful functions **

// Function create element
function createElement(element) {
	if (typeof document.createElementNS != 'undefined') {
		return document.createElementNS('http://www.w3.org/1999/xhtml', element);
	}
	if (typeof document.createElement != 'undefined') {
		return document.createElement(element);
	}
	return false;
}
// Function add dynamically stylesheet
function addStyleSheet(href, media){
	var headElement = document.getElementsByTagName('head')[0];
	var linkElement = document.createElement('link');
	media = (media === undefined ? 'all' : media);
	linkElement.setAttribute('type','text/css');
	linkElement.setAttribute('rel','stylesheet');
	linkElement.setAttribute('href', href);
	linkElement.setAttribute('media', media);
	headElement.appendChild(linkElement);
}

// Find label by ID element
function findLabel(inputElementID){
	findLabels = document.getElementsByTagName('label');
	for (var i=0; i<findLabels.length; i++) {
		if (findLabels[i].getAttributeNode("for") && findLabels[i].getAttributeNode("for").value == inputElementID) {
			return findLabels[i];
		}
	}
	return false;
}

// Resize body text
function textSize(size){

	if (!document.body  || !document.body.style) { return; }
	var SizeCurrent;
	var CurrentValue;
	var CurrentUnit;
	var x;
	var body = document.getElementsByTagName('body')[0];

	if (body.style && body.style.fontSize){
		SizeCurrent = body.style.fontSize;
	}
	else if (typeof(getComputedStyle) != 'undefined'){
		SizeCurrent = getComputedStyle(body,'').getPropertyValue('font-size');
	}
	else if (body.currentStyle){
		SizeCurrent = body.currentStyle.fontSize;
	}

	x = /([\d.]+)(.+)/.exec(SizeCurrent);
	CurrentValue = x[1];
	CurrentUnit = x[2];

	// Zoom in
	if (size == "bigger") {
		switch(CurrentUnit){
			case '%': CurrentValue = parseFloat(CurrentValue) + 1; break;
			case 'em': CurrentValue = parseFloat(CurrentValue) + 0.1; break;
			case 'ex': CurrentValue = parseFloat(CurrentValue) + 1; break;
			case 'pc': CurrentValue = parseFloat(CurrentValue) + 1; break;
			case 'pt': CurrentValue = parseFloat(CurrentValue) + 1; break;
			case 'px': CurrentValue = parseFloat(CurrentValue) + 1; break;
			case 'in': CurrentValue = parseFloat(CurrentValue) + 1; break;
			case 'mm': CurrentValue = parseFloat(CurrentValue) + 1; break;
			case 'cm': CurrentValue = parseFloat(CurrentValue) + 1; break;
		}
		body.style.fontSize = CurrentValue + CurrentUnit;
		return;
	}
	if (size == "smaller") {
		switch(CurrentUnit){
			case '%': CurrentValue = parseFloat(CurrentValue) - 1; break;
			case 'em': CurrentValue = parseFloat(CurrentValue) - 0.1; break;
			case 'ex': CurrentValue = parseFloat(CurrentValue) - 1; break;
			case 'pc': CurrentValue = parseFloat(CurrentValue) - 1; break;
			case 'pt': CurrentValue = parseFloat(CurrentValue) - 1; break;
			case 'px': CurrentValue = parseFloat(CurrentValue) - 1; break;
			case 'in': CurrentValue = parseFloat(CurrentValue) - 1; break;
			case 'mm': CurrentValue = parseFloat(CurrentValue) - 1; break;
			case 'cm': CurrentValue = parseFloat(CurrentValue) - 1;	break;
		}

		body.style.fontSize = CurrentValue + CurrentUnit;
		return;
	}
}

// Function to make text size increase and decrease
function textplus() {
	var tp;
	tp = document.getElementById('text-increase');
	if(!tp || !document.body  || !document.body.style) { return; }
	tp.onclick = function() {
		textSize('bigger');
		return false;
	};
}
function textminus() {
	var tm;
	tm = document.getElementById('text-decrease');
	if(!tm || !document.body  || !document.body.style) { return; }
	tm.onclick = function() {
		textSize('smaller');
		return false;
	};
}

// Keeping Compact Forms Accessible
// http://www.456bereastreet.com/
function hideLabel (field_id, hide) {
	var field_for;
	var labels = document.getElementsByTagName('label');
	for (var i = 0; i < labels.length; i++) {
		field_for = labels[i].htmlFor || labels[i].getAttribute('for');
		if (field_for == field_id) {
			labels[i].style.textIndent = (hide) ? '-1000px' : '0px';
			return true;
		}
	}
	return false;
}

function initOverLabels() {
	if (!document.getElementById) { return; }

	var labels, id, field;

	// Set focus and blur handlers to hide and show
	// LABELs with 'overlabel' class names.
	labels = document.getElementsByTagName('label');
	for (var i = 0; i < labels.length; i++) {

		if (labels[i].className == 'overlabel') {

			// Skip labels that do not have a named association
			// with another field.
			id = labels[i].htmlFor || labels[i].getAttribute('for');
			if (!id || !(field = document.getElementById(id))) {
				continue;
			}

			// Change the applied class to hover the label
			// over the form field.
			labels[i].className = 'overlabel-apply';
			// Hide any fields having an initial value.
			if (field.value !== '') {
				hideLabel(field.getAttribute('id'), true);
			}
			// Set handlers to show and hide labels.
			field.onfocus = function (){
				hideLabel(this.getAttribute('id'), true);
			};
			field.onblur = function () {
				if (this.value === '') {
					hideLabel(this.getAttribute('id'), false);
				}
			};

			// Handle clicks to LABEL elements (for Safari).
			labels[i].onclick = function () {
				var id, field;
				id = this.getAttribute('for');
				if (id && (field = document.getElementById(id))) {
					field.focus();
				}
			};

		}
	}
}

// Set attribute and value to element to make site open in new window, for example <a rel="external" href="...">Open in new window</a> */
// Function by Roger Johansson, www.456bereastreet.com
// Some changes by Ikeris.com
var JSTarget = {
	init: function(att,val) {
		var d=document;
		if(!d.getElementById||!d.createElement) { return; }
		if (document.getElementById && document.createElement && document.appendChild) {
			var strAtt = ((typeof att == 'undefined') || (att === null)) ? 'class' : att;
			var strVal = ((typeof val == 'undefined') || (val === null)) ? 'non-html' : val;
			var arrLinks = document.getElementsByTagName('a');
			var oLink;
			var oRegExp = new RegExp("(^|\\s)" + strVal + "(\\s|$)");
			for (var i = 0; i < arrLinks.length; i++) {
				oLink = arrLinks[i];
				if ((strAtt == 'class') && (oRegExp.test(oLink.className)) || (oRegExp.test(oLink.getAttribute(strAtt)))) {
					oLink.onclick = JSTarget.openWin;
				}
			}
		}
	},
	openWin: function(e) {
		var event = (!e) ? window.event : e;
		if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) { return true; }
		else {
			var oWin = window.open(this.getAttribute('href'), '_blank');
			if (oWin) {
				if (oWin.focus) {
					oWin.focus();
				}
			}
			return false;
		}
		oWin = null;
		return true;
	}
};

// **** CSS functions ****
// Check if object have class name
function hasClass(e, name){
	return (!e || !e.className) ? false : (new RegExp('\\b' + name + '\\b')).test(e.className);
}
// Remove class name from object
function delClass(e, name){
	return e && (e.className = e.className.replace(new RegExp('^' + name + '\\b\\s*|\\s*\\b' + name + '\\b', 'g'), ''));
}
// Add class name to object
function addClass(e, name){
	delClass(e, name);
	return e && (e.className += (e.className ? ' ' : '') + name);
}
// Swap class name in object
function replaceClass(e, class1, class2){
	if (typeof e == 'string') { e = document.getElementById(e); }
	if (hasClass(e, class1)) {
		delClass(e, class1);
		addClass(e, class2);
		return true;
	} else {
		return false;
	}
}
// Toggle class in object
function toggleClass(e, nameOfClass){
	if (typeof e == 'string') { e = document.getElementById(e); }
	if (hasClass(e, nameOfClass)){
		delClass(e, nameOfClass);
	} else {
		addClass(e, nameOfClass);
	}

	return true;
}

// Function getElementsByClassName
var getElementsByClassName=function(oElm, strTagName, strClassName){
	var arrElements=(strTagName=='*' && oElm.all)?oElm.all:oElm.getElementsByTagName(strTagName);
	var arrReturnElements=[];
	strClassName=strClassName.replace(/\-/g, "\\-");
	var oRegExp=new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
	var oElement;
	for(var i=0;i<arrElements.length;i++){
		oElement=arrElements[i];
		if(oRegExp.test(oElement.className)){
			arrReturnElements.push(oElement);
		}
	}
	return (arrReturnElements);
};

// Zebra tables
// Find elements table with "zebra" class and make zebra styles on table
// In CSS specify class even for even tr color
function ZebraTables() {
	var d=document;
	if(!d.getElementById||!d.getElementsByTagName) { return; }
	var tables = document.getElementsByTagName("table");

	for(var x=0;x!=tables.length;x++){
		var table = tables[x];

		if(hasClass(tables[x],"zebra")) {
			var tbodies = table.getElementsByTagName("tbody");
			for (var h = 0; h < tbodies.length; h++) {
				var even = true;
				var trs = tbodies[h].getElementsByTagName("tr");
				for (var i = 0; i < trs.length; i++) {
					if(even){
						if(!hasClass(trs[i],"even")){ addClass(trs[i],"even"); }
					}
					even = !even;
				}
			}
		}
	}
}

// Zebra lists
// Find elements ol, ul with "zebralist" class and make zebra styles on list
// In CSS specify class even for even li color
function zebraLists(){
	var d=document;
	if(!d.getElementById||!d.getElementsByTagName) { return; }

	var lists = getElementsByTagNames('ol,ul');
	for (var i=0;i<lists.length;i++) {

		if(hasClass(lists[i],"zebralist")){
			var items = lists[i].childNodes;
			var counter = 1;
			for (var j=0;j<items.length;j++) {
				var even = true;
				if (items[j].nodeName.toLowerCase() == 'li' && !items[j].getElementsByTagName('li').length) {
					if(even){
						if(!hasClass(items[j],"even")){ addClass(items[j],"even"); }
					}
					even = !even;
				}
			}
		}
	}
}

// Add unobtrusive print link
// Give target element (targetEl) and target (targetText) text for print button
// The function generate <li><a href="#">Print text</li>
function AddPrintLink(targetEl,targetText) {
	if (!document.getElementById || !document.createTextNode) {return;} // Check for DOM support
	if (!document.getElementById(targetEl)) {return;} // Check that the target element actually exists
	if(!window.print && (typeof window.print != "function")) {return;} // Check that the browser supports window.print
	var targetElement = document.getElementById(targetEl).getElementsByTagName("li")[2];

	var li = document.createElement('li');
	var oLink = document.createElement('a');
	oLink.id = 'printbutton'; // Give the link an id to allow styling
	oLink.href = '#'; // Make the link focusable for keyboard users
	oLink.appendChild(document.createTextNode(targetText));

	oLink.onclick = function() {
		window.print();
		return false;
	}; // Return false prevents the browser from following the link and jumping to the top of the page after printing
	li.appendChild(oLink);
	targetElement.parentNode.insertBefore(li,targetElement);
}

// Check NIP, REGON, PESEL, Passport value
var verificator_nip=[6,5,7,2,3,4,5,6,7];
var verificator_regon=[8,9,2,3,4,5,6,7];
var verificator_pesel=[1,3,7,9,1,3,7,9,1,3];

function checkNIP(a){
	a=a.replace(/[^0-9]/g,'');
	if (a.length!=10) { return false; }
	var i,n;
	for (i=n=0;i<9;i++){
		n+=a.charAt(i)*verificator_nip[i];
	}
	n%=11;
	return ( n == a.charAt(9));
}

function checkRegon(a){
	if (a.search(/[^0-9]/)>=0 || a.length!=9) { return false; }
	var i,n;
	for (i=n=0;i<8;i++) {
		n+=a.charAt(i)*verificator_regon[i];
	}
	n%=11;
	return ( n == a.charAt(8));
}

function checkPeselNo(a){
	if (a.search(/[^0-9]/)>=0 || a.length!=11) { return false; }
	var i,n;
	for (i=n=0;i<10;i++) {
		n+=a.charAt(i)*verificator_pesel[i];
	}
	n%=10;
	return  ( (10-n)%10 == a.charAt(10));
}

function checkPassportNo(value){
	var result = false;
	var valid = /^[a-zA-Z]{2,2}[0-9]{7,12}$/;
	if(value.match(valid) && value.length < 15){
		result = true;
	}
	else {
		result = false;
	}
	return result;
}

// Get current date
function getCurrentDate() {
	var result = '';
	var currDate = new Date();
	if(currDate.getDate() < 10){ result += '0'; }
	result += currDate.getDate() + '-';
	if(currDate.getMonth() < 9){ result += '0'; }
	result += (currDate.getMonth() + 1) + '-';
	result += currDate.getFullYear();
	return result;
}

// Check if user have more than 18 years old
// Return false if have more than 18 years old
function checkIsAdult(pesel) {

	if (pesel === null || pesel === '' || pesel.length != 11 || !isNaN(pesel)) { return true; }

	var currDate = getCurrentDate();
	var birthYear = parseInt( pesel.substr(0,2), 10 );
	var birthMon  = parseInt( pesel.substr(2,2), 10 );
	var birthDay  = parseInt( pesel.substr(4,2), 10 );
	var currDay   = parseInt( currDate.substr(0,2), 10 );
	var currMon   = parseInt( currDate.substr(3,2), 10 );
	var currYear  = parseInt( currDate.substr(6,4), 10 );

	if ( birthYear > currYear - 2000 ){
		birthYear = 1900 + birthYear;
	}
	else{
		birthYear = 2000 + birthYear;
	}

	if ( birthYear + 18 > currYear ) {
		return false;
	}
	else if ( birthYear + 18 == currYear ) {
		if ( birthMon > currMon ) {
			return false;
		}
		else if ( birthMon == currMon ) {
			if ( birthDay > currDay ) {
				return false;
			}
		}
	}
	return true;
}

// Check e-mail address
function checkValidEmail(value) {
	var reg = new RegExp("[^@]{1,}[@]{1}[^@.]{1,}[.]{1}[^@]{1,}","gi");
	if (null === value.match(reg)) {
		return false;
	}
	return true;
}
// Check postal code in XX-YYY format
function checkPostalCode(postalCode){
	var result = true;
	if(postalCode !== null || postalCode !== '' && (postalCode.length == 6 )) {
		var sep = postalCode.indexOf('-');
		if ( sep == -1 ){
			result = false;
		}else{
			if ( !isNaN(postalCode.substring(0,sep)) && !isNaN(postalCode.substring(sep+1,postalCode.length)) ){
				result = true;
			}else{
				result = false;
			}
		}
	}
	else{
		result = false;
	}
	return result;
}

// Given a keyCode value, this function checks against the known keyCodes for Special
// Keys as described in the Quirksmode article Javascript - Detecting keystrokes
// http://www.quirksmode.org/js/keys.html (as of 19 September 2007).
function keyup_specialKey(code){
	if ( 0 === code ) { return true; }				// f1 - f12 (Opera Mac)
	if ( 5 == code || 6 == code ) { return true; }	// help (Mac only. Firefox/Safari give different values.)
	if ( 8 == code ) { return true; }				// backspace
	if ( 9 == code ) { return true; }				// tab
	if ( 12 == code ) { return true; }				// num lock (Mac)
	if ( 13 == code ) { return true; }				// enter
	if ( 16 <= code && code <= 18 )	{ return true; }// shift, ctrl (also cmd on Opera Mac), alt
	if ( 20 == code ) { return true; }				// caps lock
	if ( 27 == code ) { return true; }				// escape (also num lock on Opera Mac)
	if ( 33 <= code && code <= 40 )	{ return true; }// page up, page down, end, home, arrow keys
	if ( 45 == code ) { return true; }				// insert (also help on Opera Mac)
	if ( 46 == code ) { return true; }				// delete
	if ( 91 == code ) { return true; }				// start
	if ( 112 <= code && code <= 123 ) { return true; } // f1 - f12
	if ( 144 == code ) { return true; }				// num lock
	return false;
}

// Given a keyCode value, this function checks against the known keyCodes for Numeric
// Keys on both the keyboard and key pad.
function keyup_numericKey(code){
	if ( 48 <= code && code <= 57 ) { return true; }		// number keys (top of keyboard)
	else if ( 96 <= code && code <= 105 ) { return true; }	// number keys (on key pad)
	else { return false; }
}

// Given an element, this function attempts to give that element the browser's focus.
function focusOn(elm){
	if ( elm === null ) { return; }

	try{
		elm.focus();
	}
	catch ( ex ){
		// Catch Mozilla exception when new focus field has autocomplete data.
	}
}

// Check Enter function
function checkEnter(e){ //e is event object passed from function invocation
	var characterCode; //literal character code will be stored in this variable

	if(e && e.which){ //if which property of event object is supported (NN4)
		e = e;
		characterCode = e.which; //character code is contained in NN4's which property
	}
	else{
		e = event;
		characterCode = e.keyCode; //character code is contained in IE's keyCode property
	}

	if(characterCode == 13){ //if generated character code is equal to ascii 13 (if enter key)
		document.forms[0].submit(); //submit the form
		return false;
	}
	else{
		return true;
	}
}

// Toggle classes on specified element
function toggle_element() {
	var elem = this;
	elem.blur();
	if (elem && (elem.getAttribute("href")!== null)) {
		var getid = elem.href.split('#');
		var id = document.getElementById(getid[1]);
		if(hasClass(id,"hide")){ replaceClass(id,"hide","view"); }
		else { replaceClass(id,"view","hide"); }
	}
	return false;
}
// Initialisation Toggle classes
function toggle_init() {
	var i, ids, targetURL;
	var anchors = document.getElementsByTagName('*');
	for (i = 0; i<anchors.length; i++) {
		if(hasClass(anchors[i],"toggle") && (anchors[i].getAttribute("href")!== null)){
			ids = anchors[i].href.split("#");
			targetURL = document.getElementById(ids[1]);
			if(!hasClass(targetURL,"hide")){ addClass(targetURL,"hide"); }
			anchors[i].onclick = toggle_element;
		}
	}
}

// Pullquote function. Use "pullquote" class name to generale pullquote
// Function by Roger Johansson, www.456bereastreet.com
var pullquote = {
	init : function() {
	// Check that the browser supports the methods used
		if (!document.getElementById || !document.createElement || !document.appendChild) return false;
		var oElement, oPullquote, oPullquoteP, oQuoteContent, i, j;
	// Find all span elements with a class name of pullquote
		var arrElements = document.getElementsByTagName('span');
		var oRegExp = new RegExp("(^|\\s)pullquote(\\s|$)");
		for (i=0; i<arrElements.length; i++) {
	// Save the current element
			oElement = arrElements[i];
			if (oRegExp.test(oElement.className)) {
	// Create the blockquote and p elements
				oPullquote = document.createElement('blockquote');
				oPullquote.className = oElement.className
				oPullquoteP = document.createElement('p');
	// Insert the pullquote text
				for(j=0;j<oElement.childNodes.length;j++) {
					oPullquoteP.appendChild(oElement.childNodes[j].cloneNode(true));
				}
				oPullquote.appendChild(oPullquoteP);
	// Insert the blockquote element before the span elements parent element
				oElement.parentNode.parentNode.insertBefore(oPullquote,oElement.parentNode);
			}
		}
	}
};

// asynchroniczny sposob wywolywania trackera GA, tj. ogolnie odnoszenie sie do ich skryptow bez opozniania ladowania strony przez ladowanie zewnetrznego pliku JS.
// http://mgorny.jogger.pl/2008/01/12/asynchroniczne-wywolanie-nowego-trackera-google-analytics/
function addGoogleStats() {
        var GAID = 'UA-291926-1';
        var head = document.getElementsByTagName('head')[0];
        var scr = document.createElement('script');
        scr.type = 'text/javascript';
        scr.src = (location.protocol == 'http:' ? 'http://www.' : 'https://ssl.') + 'google-analytics.com/'+'ga.js';
        var once = 0;

                function runMe() { 
                        if (scr.readyState == 'loading' || _gat == undefined || once) { return; }
                        clearInterval(timer);
                        once++;

                        var pageTracker = _gat._getTracker(GAID);
                        pageTracker._initData();
                        pageTracker._trackPageview();
                }

        var timer = setInterval(runMe, 2000);
        scr['onload'] = runMe;
        scr['onreadystatechange'] = runMe;
        head.appendChild(scr); 
}


// ************************
// load all event in onload
// ************************
addEvent(window, 'load', function(){
	textplus();
	textminus();
	initOverLabels();
	JSTarget.init("rel","external");
	ZebraTables(); // find table on make zebra on every tr
	toggle_init(); // toggle class on elements
	pullquote.init(); // initialise pullquote
	addGoogleStats(); // initialise Google Stats
});