//Super Duper Validation Function ///////////////////////////////////////////////////////////////////////////////////////////
function validate(form) {
 var error = "";
 var email = /^[\w\.=_\-]+@[\w\.\-]+\.[a-zA-Z]{2,4}$/;
 var url = /^http(s)?:\/\/[a-zA-Z0-9\.-_]/;
 var date = /^\d{1,2}\/\d{1,2}\/\d{4}$/;
 var integer = /^\d+$/;
 var decimal = /^-?\d+(\.\d\d?)?$/ 
 var els = form.elements;
 for (var i=0;i<els.length;i++) {
	elRequired = els[i].getAttribute('gm_required'); 
	elPhrase = els[i].getAttribute('gm_phrase');
	elValid = els[i].getAttribute('gm_validation'); 
	elMax = els[i].getAttribute('gm_maxlength');
	elConditional = els[i].getAttribute('gm_conditional');
	elDependent = els[i].getAttribute('gm_dependent');
	elCompare = els[i].getAttribute('gm_compare');
	if(elDependent) elDependent = elDependent.split(",");
	elName = els[i].name; elValue = els[i].value; 
	elType = els[i].type;
	if(elValue == "  ") elValue = "";
	if (elRequired || (elValid && elValue) || elMax || elConditional || elDependent || elCompare) {
		switch(elValid) {			
			case "email":
			if(!email.test(elValue)) { error += " - " + elPhrase + "\n"; } break;	
			
			case "url":
			if(!url.test(elValue)) { error += " - " + elPhrase + " (Please include http:\/\/)\n"; } break;	
			
			case "select":
			if((els[i].selectedIndex/1) ==0) { error += " - " + elPhrase + " (Please make a choice)\n"; } break;	
			
			case "ssn":
			if(elValue.length != 9 || isNaN(elValue)) { error += " - Social Security No. (No dashes or spaces)\n"; } break;
			
			case "zip":
			if(elValue.length != 5 || isNaN(elValue)) { error += " - " + elPhrase + " (5 digits only)\n"; } break;
			
			case "date":
			if(date.test(elValue)) {
				var dArr = elValue.split("/"); var d = new Date(elValue);
				if(!(d.getMonth()+1==dArr[0] && d.getDate() == dArr[1] && d.getFullYear() == dArr[2])) {
					error += " - " + elPhrase + " (i.e. 1/5/1986)\n";
				}
			} else {
					error += " - " + elPhrase + " (i.e. 1/5/1986)\n";
			}
			break;
			
			case "radio":
			
			if(form[elName].length) {
				elR = form[elName].length;
				checked = false;
				for(var y =0; y<elR;y++) {
					if(form[elName][y].checked) {
						checked = true;
						break;
					}
				}
			} else {
				checked = form[elName].checked;
			}
			if(checked==false) { error += " - " + elPhrase + " (Please make a choice)\n"; }
			break;
			
			case "numeric":
			if(isNaN(elValue.replace(/,/gi,""))) { error += " - " + elPhrase + " (Must be a number)\n"; }
			break;
			
			case "integer":
			if(!integer.test(elValue)) { error += " - " + elPhrase + "\n"; } break;	
			break;
			
			case "decimal":
			if(!decimal.test(elValue)) { error += " - " + elPhrase + "\n"; } break;	
			break;
			
			case "checkbox":
			if(!form[elName].checked && type==1) { error += " - " + elPhrase + "\n"; }
			break;
			
			case "conditional":
			if(elValue == "" && form[elConditional].value == "") { error += " - " + elPhrase + "\n"; }
			break;
			
			case "dependent":
			if(elValue == "" && radio(form[elDependent[0]]) == elDependent[1]) { error += " - " + elPhrase + "\n"; }
			break;
			
			case "compare":
			if(elValue != form[elCompare].value) { error += " - " + elPhrase + "\n"; }
			break;
			
			default:
			if(elType=="textarea") {
				if(elMax && (elValue.length > elMax)) {
						error += " - " + elPhrase + " can be no longer than " + elMax + " characters\n";
				}
				if(elRequired && elValue.length <1) {
					  error += " - " + elPhrase + "\n";
				}
			} else if (elRequired) { 
				if(!elValue) { error += " - " + elPhrase + "\n"; } break;
			}
			break;
		}
	}  
 }
 if(error != "") {
	 error = "The following information is missing and/or invalid:\n\n" + error;
	 alert(error);
	 return false;
 } else {
	 return true;
 }
}


// Radio Function ////////////////////////////////////////////////////////////////////////////////////////////////////
function radio(element) {
	elR = element.length;
		for(var y =0; y<elR;y++) {
			if(element[y].checked) {
				return element[y].value;
				break;
			}
		}
		return null;
}


// FADING (FAT) Function /////////////////////////////////////////////////////////////////////////////////////////////
var Fat = {
	make_hex : function (r,g,b) 
	{
		r = r.toString(16); if (r.length == 1) r = '0' + r;
		g = g.toString(16); if (g.length == 1) g = '0' + g;
		b = b.toString(16); if (b.length == 1) b = '0' + b;
		return "#" + r + g + b;
	},
	fade_all : function (elClass)
	{
		var a = document.getElementsByTagName("tr");
		for (var i = 0; i < a.length; i++) 
		{
			var o = a[i];
			var r = /fade-?(\w{3,6})?/.exec(o.className);
			if (r && o.className.match(elClass))
			{
				if (!r[1]) r[1] = "";
				if (o.id) Fat.fade_element(o.id,null,null,"#"+r[1]);
			}
		}
	},
	fade_element : function (id, fps, duration, from, to) 
	{
		if (!fps) fps = 30;
		if (!duration) duration = 1000;
		if (!from || from=="#") from = "#EFEFEF";
		if (!to) to = "#FFFFFF";
		
		var frames = Math.round(fps * (duration / 1000));
		var interval = duration / frames;
		var delay = interval;
		var frame = 0;
		
		if (from.length < 7) from += from.substr(1,3);
		if (to.length < 7) to += to.substr(1,3);
		
		var rf = parseInt(from.substr(1,2),16);
		var gf = parseInt(from.substr(3,2),16);
		var bf = parseInt(from.substr(5,2),16);
		var rt = parseInt(to.substr(1,2),16);
		var gt = parseInt(to.substr(3,2),16);
		var bt = parseInt(to.substr(5,2),16);
		
		var r,g,b,h;
		while (frame < frames)
		{
			r = Math.floor(rf * ((frames-frame)/frames) + rt * (frame/frames));
			g = Math.floor(gf * ((frames-frame)/frames) + gt * (frame/frames));
			b = Math.floor(bf * ((frames-frame)/frames) + bt * (frame/frames));
			h = this.make_hex(r,g,b);
		
			setTimeout("Fat.set_bgcolor('"+id+"','"+h+"')", delay);

			frame++;
			delay = interval * frame; 
		}
		setTimeout("Fat.set_bgcolor('"+id+"','"+to+"')", delay);
	},
	set_bgcolor : function (id, c)
	{
		var o = document.getElementById(id);
		o.style.backgroundColor = c;
	}
}
// TABULASTIC TAB STATION ULTRA +5 Strength //////////////////////////////////////////////////////////////////////////
function tab(elLink) {
	var totalTabs = elLink.parentNode.parentNode.getElementsByTagName('a');
	var num = elLink.parentNode.id.split('-')[1];
	for(var i=0;i<totalTabs.length;i++) {
		var me = totalTabs[i].parentNode.id.split('-')[1];
		var el = document.getElementById("t-"+me);
		var elTab = document.getElementById("a-"+me);
		el.className = (me == num) ? el.className.replace(/(on)|(off)/gi,"on") : el.className.replace(/(on)|(off)/gi,"off");
		elTab.className = (me == num) ? "on" : "";
	}
	elLink.blur();
	return false;
}

// POP til you DROP Function //////////////////////////////////////////////////////////////////////////////////////////
function popup(linker,url,x,y) {
	var myWindow = window.open(url,"PopWindow","width="+x+",height="+y+",scrollbars=no,resizable=no,status=no");
	if(window.focus) 
		myWindow.focus();
	linker.blur();
	return false;
}

// CHECK FUNCTION /////////////////////////////////////////////////////////////////////////////////////////////////////
function check(id, type) {
	if(type=="on") {
		temp = true;
	} else {
		temp = false;
	}
	var inputs = document.getElementsByTagName('input');
	for(var i=0;i<inputs.length; i++) {
		if(inputs[i].id==id) {
			inputs[i].checked = temp;
		}
	}
}

//  Link to Function //////////////////////////////////////////////////////////////////////////////////////////////////
function linkTo(ref,conf,url) {
	if(!conf)
		window.location = url;
	if(conf && confirm(conf))
		window.location = url;
	ref.blur();
	return false;
}

// COLLAPSE EXPAND ELEMENTS TAGS FUNCTION /////////////////////////////////////////////////////////////////////////////
function expandCollapse(elementId) {
	if(document.getElementById(elementId).style.display == "none") {
		document.getElementById(elementId).style.display = "block";
	} else {
		document.getElementById(elementId).style.display = "none";
	}
}
// EXPAND ELEMENTS TAGS FUNCTION /////////////////////////////////////////////////////////////////////////////////////////////////////
function expand(elementId) {
			document.getElementById(elementId).style.display = "";
}
// COLLAPSE ELEMENTS TAGS FUNCTION /////////////////////////////////////////////////////////////////////////////////////////////////////
function collapse(elementId) {
			document.getElementById(elementId).style.display = "none";
}
