/* RTBWU is the global object for all Read The Bible With Us scripts. */
RTBWU = {
	ie6: false,
	ie7: false,
	ie8: false,
	init: function() {
		/* Force IE to recognize HTML5 elements. */
		document.createElement('header');
		document.createElement('footer');
		document.createElement('nav');
		document.createElement('article');
		document.createElement('section');
		document.createElement('aside');
		document.createElement('figure');
		document.createElement('time');
		if(window.addEventListener) {
			window.addEventListener('load', function(){RTBWU.loaded();}, false);
		} else if(window.attachEvent) {
			window.attachEvent('onload', function(){RTBWU.loaded();});
		} else {
			window.onload = function(){RTBWU.loaded();};
		}
	}(),
	loaded: function() {
		setInterval(RTBWU.nextSlide, 60000);
		if(RTBWU.ie8) {
			RTBWU.ie8Fixes();
		}
		if(RTBWU.ie7) {
			RTBWU.ie7Fixes();
		}
		if(RTBWU.ie6) {
			RTBWU.ie6Fixes();
		}
		if(document.getElementById('join')) {
			RTBWU.setUsernameSuggestions();
		}
		RTBWU.setFormValidation();
		RTBWU.setDeleteConfirm();
		if(navigator.userAgent.indexOf('WebKit') !== -1 && navigator.userAgent.indexOf('Mobile') !== -1 ) {
			RTBWU.iphone();
		}
	},
	iphone: function() {
		var main_nav = document.getElementById('nav'),
			nav_link = document.createElement('a'),
			main_li = main_nav ? main_nav.getElementsByTagName('li') : [],
			cnt = 0;
		if(main_nav) {
			nav_link.id = 'nav_toggle';
			nav_link.href = '#';
			nav_link.onclick = function() {
				var main_nav = document.getElementById('nav');
				if(main_nav.className.indexOf('open') == -1) {
					main_nav.className = 'open';
					document.getElementById('content').style.display='none';
					document.getElementById('footer').style.display='none';
				} else {
					main_nav.className = '';
					document.getElementById('content').style.display='block';
					document.getElementById('footer').style.display='block';
				}
			};
			main_nav.insertBefore(nav_link, main_nav.firstChild);
		}
		for(cnt = 0; cnt < main_li.length; cnt++) {
			if(main_li[cnt].getElementsByTagName('a')) {
				main_li[cnt].onclick = function() {
					if(this.getElementsByTagName('a').length > 0) {
						location.href = this.getElementsByTagName('a')[0].href;
					}
				};
			}
		}
	},
	setDeleteConfirm: function() {
		var all = document.getElementsByTagName('a'),
			all_len = all.length,
			cnt = 0;
		for(cnt = 0; cnt < all_len; cnt++) {
			if(all[cnt].className.indexOf('delete') !== -1) {
				RTBWU.addEvent(all[cnt], 'click', 
					function(e){
						var all_title = 'Are you sure you want to do this?',
							el = e.target || e.srcElement;
						if(el.title != '') {
							all_title = el.title;
						}
						if(!confirm(all_title)){
							e.preventDefault; e.returnValue = false;
						}
					}
				);
			}
		}
	},
	setFormValidation: function() {
		var all = document.getElementsByTagName('form'),
			all_len = all.length,
			all_cnt = 0,
			cur = false,
			fields = [],
			fields_len = 0,
			fields_cnt = 0;
		for(all_cnt; all_cnt < all_len; all_cnt++) {
			cur = all[all_cnt];
			fields = cur.elements;
			fields_len = fields.length;
			for(fields_cnt = 0; fields_cnt < fields_len; fields_cnt++) {
				RTBWU.addEvent(fields[fields_cnt], 'blur', RTBWU.doFieldValidation);
			}
			RTBWU.addEvent(cur, 'submit', RTBWU.doFormValidation);
		}
	},
	doFormValidation: function(e) {
		var el, elm, elm_len, elm_cnt = 0, valid = true;
		try {
			if(e.nodeName) {
				el = e;
			} else {
				el = e.target || e.srcElement
			}
		} catch(err) {
			el = e.target || e.srcElement
		}
		elm = el.elements;
		elm_len = elm.length;
		for(elm_cnt = 0; elm_cnt < elm_len; elm_cnt++) {
			valid = !RTBWU.doFieldValidation(elm[elm_cnt]) && valid;
		}
		if(!valid) {
			try {
				e.preventDefault();
				e.returnValue = false;
				alert('Please correct the errors on the form and try to submit again.');
			} catch(err) {}
		}
	},
	doFieldValidation: function(e) {
		var el,
			val = [],
			val_len = 0,
			val_cnt = 0,
			hasError = false,
			ref_el = false,
			err_msg = '';
		try {
			if(e.nodeName) {
				el = e;
			} else {
				el = e.target || e.srcElement
			}
		} catch(err) {
			el = e.target || e.srcElement
		}
		if(el.className.indexOf('validate-') !== -1) {
			val = el.className.match(/validate-(.*?)( |$)/);
			val = val[1];
			val = val.split('-');
			val_len = val.length;
			el.parentNode.className = el.parentNode.className.replace(/rtbwu-error/g, '');
			for(val_cnt = 0; val_cnt < val_len; val_cnt++) {
				switch(val[val_cnt]) {
					case 'string':
						if(el.value.length < 1) {
							hasError = true;
							err_msg = 'Enter a value for ';
						}
					break;
					case 'email':
						if(!el.value.match(/.*?@.*?\..*?/)) {
							hasError = true;
							err_msg = 'Enter a valid ';
						}
					break;
					case 'confirm':
						val_cnt++;
						ref_el = document.getElementById(val[val_cnt]);
						if(ref_el && ref_el.value != el.value) {
							hasError = true;
							err_msg = 'Non-matching value for ';
						}
					break;
					case 'datetime':
						if(!el.value.match(/^\d?\d\/\d?\d\/\d\d\d\d \d?\d:\d\d [AaPp][Mm]$/)) {
							hasError = true;
							err_msg = 'Enter a valid datetime value (MM/DD/YYYY HH:MM AM) for ';
						}
					break;
				}
			}
			if(hasError) {
				el.parentNode.className += ' rtbwu-error';
				if(el.parentNode.getElementsByTagName('span').length > 0) {
					el.parentNode.getElementsByTagName('span')[0].innerHTML = err_msg;
				} else {
					el.parentNode.insertBefore(RTBWU.createElement('span', {'class': 'rtbwu-error', 'innerHTML': err_msg}), el.parentNode.firstChild);
				}
			}
		}
		return hasError;
	},
	setUsernameSuggestions: function() {
		var joinForm = document.getElementById('join'),
			suggestBefore = joinForm ? joinForm.getElementsByTagName('div')[1] : false,
			suggestBox = RTBWU.createElement('div', {'id': 'rtbwu-suggest'}),
			nameField = document.getElementById('name'),
			emailField = document.getElementById('email');
		if(joinForm && suggestBefore) {
			joinForm.insertBefore(suggestBox, suggestBefore);
			if(nameField) {
				RTBWU.addEvent(nameField, 'keyup', RTBWU.getUsernameSuggestions);
			}
			if(emailField) {
				RTBWU.addEvent(emailField, 'keyup', RTBWU.getUsernameSuggestions);
			}
		}
	},
	getUsernameSuggestions: function(e) {
		var usernameSuggestion = document.getElementById('rtbwu-username-suggestion'),
			nameField = document.getElementById('name'),
			emailField = document.getElementById('email');
		if(usernameSuggestion) {
			document.body.removeChild(usernameSuggestion);
		}
		usernameSuggestion = RTBWU.createElement('script', 
				{
					'id': 'rtbwu-username-suggestion',
					'src': '/js/suggest.php?ajax=true&name=' + nameField.value + '&email=' + emailField.value
				}
			);
		document.body.appendChild(usernameSuggestion);
	},
	populateUsernameSuggestions: function(suggestions) {
		var suggestBox = document.getElementById('rtbwu-suggest'),
			cnt = 0;
		if(suggestBox) {
			suggestBox.innerHTML = '<p>Enter your desired username below or pick one of the following: </p><ul>';
			for(cnt in suggestions) {
				suggestBox.innerHTML += '<li><a href="#" onclick="RTBWU.insertUsernameSuggestion(\'' + suggestions[cnt] + '\'); return false;">' + suggestions[cnt] + '</a></li>';
			}
			suggestBox.innerHTML += '</ul>';
			suggestBox.style.display = 'block';
		}
	},
	insertUsernameSuggestion: function(suggestion) {
		var usernameField = document.getElementById('username'),
			suggestBox = document.getElementById('rtbwu-suggest');
		if(usernameField) {
			usernameField.value = suggestion;
			if(suggestBox) {
				suggestBox.style.display = 'none';
			}
		}
	},
	nextSlide: function() {
		var all = document.getElementById('slides'),
			all_cnt = 0,
			all_len = 0,
			all_cur = false,
			active = false,
			ns = false,
			reveal = function() {
				if(ns && active) {
					if(parseFloat(ns.style.opacity) < 1) {
						ns.style.opacity = (parseFloat(ns.style.opacity)+.1);
						ns.style.filter = 'alpha(opacity=' + (parseFloat(ns.style.opacity)+.1*100) + ')';
						setTimeout(reveal, 100);
					} else {
						ns.style.opacity = 1;
						ns.style.filter = 'alpha(opacity=100)';
						active.style.opacity = 0;
						active.style.filter = 'alpha(opacity=0)';
						active.className = '';
						ns.className = 'active';
					}
				}
			};
		if(all) {
			all = all.getElementsByTagName('img');
			all_len = all.length;
			for(all_cnt=0; all_cnt < all_len; all_cnt++) {
				all_cur = all[all_cnt];
				if(all_cur.className.indexOf('active') !== -1) {
					active = all_cur;
					if(all_cnt+1 != all_len) {
						ns = all[all_cnt+1];
					} else {
						ns = all[0];
					}
					ns.className = 'top';
					ns.style.opacity = 0;
					active.style.opacity = 1;
					reveal();
				}
			}
		}
	},
	ie8Fixes: function() {
		var all = document.getElementsByTagName('*'),
			all_cnt = 0,
			all_len = all.length;
		for(all_cnt = 0; all_cnt < all_len; all_cnt++) {
			if(all[all_cnt].className.indexOf('hidden') !== -1) {
				all[all_cnt].style.backgroundImage = 'none';
			}
		}
	},
	ie7Fixes: function() {
		var all = document.getElementById('footer').getElementsByTagName('li'),
			all_cnt = 0,
			all_len = all.length,
			slash = document.createElement('span');
		slash.innerHTML = ' / ';
		for(all_cnt = 0; all_cnt < all_len; all_cnt++) {
			if(all_cnt !== 0) {
				all[all_cnt].innerHTML = '&middot; ' + all[all_cnt].innerHTML;
			} else {
				all[all_cnt].parentNode.parentNode.insertBefore(slash, all[all_cnt].parentNode);
			}
		}
	},
	ie6Fixes: function() {
		var all = document.getElementsByTagName('img'),
			all_cnt = 0,
			all_len = all.length,
			old_src = '',
			about = document.getElementById('aboutus');
		about.onmouseover = function() {this.style.filter="progid:DXImageTransform.Microsoft.alpha(opacity=100)"};
		about.onmouseout = function() {this.style.filter="progid:DXImageTransform.Microsoft.alpha(opacity=30)"};
		for(all_cnt = 0; all_cnt < all_len; all_cnt++) {
			old_src = all[all_cnt].src;
			if(old_src.indexOf('png') !== -1) {
				all[all_cnt].src = "images/clear.gif";
				all[all_cnt].style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="' + old_src + '", sizingMethod="image")';
			}
		}
	},
	addEvent: function(el, evnt, meth) {
		if(!el) {
			return false;
		}
		if(window.addEventListener) {
			el.addEventListener(evnt, meth, false);
		} else if(window.attachEvent) {
			el.attachEvent('on' + evnt, meth);
		}
	},
	createElement: function(el, attributes) {
		var key;
		el = document.createElement(el);
		if(!attributes) {
			attributes = {};
		}
		for(key in attributes) {
			switch(key) {
				default:
					el.setAttribute(key, attributes[key]);
				break;
				case 'class':
				case 'className':
					el.className = attributes[key];
				break;
				case 'id':
					el.id = attributes[key];
				break;
				case 'innerHTML':
					el.innerHTML = attributes[key];
				break;
			}
		}
		return el;
	}
};

