addLoadEvent(initLoaders);
addLoadEvent(initExternalLinks);
addLoadEvent(initToggles);
addLoadEvent(initExpandingTextareas);
addLoadEvent(initPWStrength);

function initExpandingTextareas() {
	var textareas = getElementsByClassName("expanding");
	for(var i = 0; i < textareas.length; i++) {
		textareas[i].onkeyup = expand;
		expand.call(textareas[i]);
		textareas[i].rows = 3;
	}
}

function expand() {
	var el = this;
	var lines = el.value.replace((new RegExp(".{"+ el.cols + "}","g")),"\n").split("\n");
	if(lines.length > 3) {
		if(lines[lines.length - 1] == "") lines.length--;
		lines = lines.length;
		el.rows = lines + 1;
	}
}

function initLoaders() {
	var buttons = getElementsByClassName("loader");

	for(var i = 0; i < buttons.length; i++) {
		buttons[i].onclick = function() {
			var loading = document.createElement("div");
			loading.className = "loading";
			this.parentNode.appendChild(loading);
			this.value = "Please Wait...";
		}
	}
}

function initExternalLinks() {
	var hyperlinks = getElementsByRelName("external");
	for(var i = 0; i < hyperlinks.length; i++) {
		hyperlinks[i].target = "_blank";
	}
}

function initToggles() {
	var switches = getElementsByRelName("toggle");
	for(var i = 0; i < switches.length; i++) {
		switches[i].onclick = function() {
			splitrel = this.rel.split(" ");
			for(var j = 0; j < splitrel.length; j++) { if(splitrel[j] == "toggle") idIndex = j + 1; }
			var el = document.getElementById(splitrel[idIndex]);
			if(el.style.display == "block") { el.style.display = "none"; } else { el.style.display = "block"; }
			return false;
		}
	}
}

function initPWStrength() {
	var pwMeter = document.getElementById("pwEntry");
	if(pwMeter.id != "") {
		pwMeter.onkeyup = pwStrength;
	}
}

function pwStrength() {
	var strongRegex = new RegExp("^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\W).*$", "g");
	var mediumRegex = new RegExp("^(?=.{7,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))).*$", "g");
	var enoughRegex = new RegExp("(?=.{6,}).*", "g");
	
	var pwd = this.value;
	var pwMeter_text = document.getElementById("pwMeter_text");
	var pwMeter_blank = document.getElementById("pwMeter_blank");

	if(pwd.length == 0) {
		pwMeter_blank.style.width = "100%";
		pwMeter_text.innerHTML = "";
	} else if(false == enoughRegex.test(pwd)) {
		pwMeter_blank.style.width = "75%";
		pwMeter_text.innerHTML = "Very Weak";
	} else if(strongRegex.test(pwd)) {
		pwMeter_blank.style.width = "0";
		pwMeter_text.innerHTML = "Strong";
	} else if(mediumRegex.test(pwd)) {
		pwMeter_blank.style.width = "25%";
		pwMeter_text.innerHTML = "Medium";
	} else {
		pwMeter_blank.style.width = "50%";
		pwMeter_text.innerHTML = "Weak";
	}
}

// Helper functions...
function getStyle(oElm, strCssRule){
	var strValue = "";
	if(document.defaultView && document.defaultView.getComputedStyle){
		strValue = document.defaultView.getComputedStyle(oElm, "").getPropertyValue(strCssRule);
	}
	else if(oElm.currentStyle){
		strCssRule = strCssRule.replace(/\-(\w)/g, function (strMatch, p1){
			return p1.toUpperCase();
		});
		strValue = oElm.currentStyle[strCssRule];
	}
	return strValue;
}

function selectText(elementID) {
	var element = document.getElementById(elementID);
	if(element) {
		element.select();
	}
	return false;
}

function setOpacity(element, opacity) {
	element.style.opacity = opacity / 10;
	element.style.filter = 'alpha(opacity=' + opacity * 10 + ')';
}

function addLoadEvent(func) {
	var oldonload = window.onload;
	if(typeof window.onload != 'function') { window.onload = func; } else {
		window.onload = function() {
			if(oldonload) { oldonload(); }
			func();
		}
	}
}

function getElementsByClassName(classname) {
	var node = document.getElementsByTagName("body")[0];
	var a = [];
	var re = new RegExp('\\b' + classname + '\\b');
	var els = node.getElementsByTagName("*");
	for(var i = 0, j = els.length; i < j; i++) if(re.test(els[i].className)) a.push(els[i]);
	return a;
}

function getElementsByRelName(relname) {
	var node = document.getElementsByTagName("body")[0];
	var a = [];
	var re = new RegExp('\\b' + relname + '\\b');
	var els = node.getElementsByTagName("*");
	for(var i = 0, j = els.length; i < j; i++) if(re.test(els[i].rel)) a.push(els[i]);
	return a;
}

