function InputValidator(){

	this.validateSelect = function(obj, default_select){
		object_value = obj.options[obj.selectedIndex].value;
		return (object_value != default_select);
	};
	
	this.validatePassword = function(field_default, i){
		password_initial = document.getElementById("field_"+i).value;
		password_confirmed = password_initial;
		switch(field_default){
			case "Password":
				password_confirmed = document.getElementById("field_"+(i+1)).value;
			break;
			case "Confirm password":
				password_initial = document.getElementById("field_"+(i-1)).value;
			break;
		}
		return (password_confirmed == password_initial && password_initial.length >= 6);
	};
	
	this.validateField = function(type, obj, default_value, i){
		input_value = "";
		isvalid = false;
		switch(type){
			case "text": 
				input_value = obj.value;
				isvalid =  (validate.validText(input_value)); 
			break;
			case "password":
				return this.validatePassword(default_value, i);
			break;
			case "name": 
				input_value = obj.value;
				isvalid = (validate.validStringNum(input_value)); 
			break;
			case "sport": case "gender": case "country": case "plan":
				input_value = 'select';
				isvalid = (this.validateSelect(obj, "default")); 
			break;
			case "email": 
				input_value = obj.value;
				isvalid = validate.validEmail(input_value); 
			break;
			case "month":
				input_value = 'select';
				isvalid = (this.validateSelect(obj, "mm")); 
			break;
			case "cc_card_num":
				input_value = obj.value;
				isvalid = (validate.validCC(input_value)); 
			break;
			case "cc_card_ccv":
				input_value = obj.value;
				isvalid = (validate.validCC_CCV(input_value)); 
			break;
			case "fullmonth":
				input_value = 'select';
				isvalid = (this.validateSelect(obj, "month")); 
			break;
			case "day":
				input_value = 'select';
				isvalid = (this.validateSelect(obj, "dd")); 
			break;
			case "year":
				input_value = 'select';
				isvalid = (this.validateSelect(obj, "yyyy")); 
			break;
			case "subdomain": 
				input_value = obj.value;
				isvalid = validate.validTextAndNums(input_value); 
			break;
			case "string_num": 
				input_value = obj.value;
				isvalid = validate.validTextAndNums(input_value); 
			break;
		}
		return (isvalid && input_value != default_value && input_value != "");
	};
	
	this.validate = function(){
		field_length = document.getElementById("field_length").value;
		processed = true;
		errors = new Array();
		headers = new Array();
		error_headers = new Array();
		section_errors = new Array();
		for( i = 0; i < field_length; i++){
			field_object = document.getElementById("field_"+i);
			if(field_object != null){
				field_type = document.getElementById("type_"+i).value;
				field_default = document.getElementById("name_"+i).value;
				field_header = document.getElementById("header_"+i).value;
				cobj = document.getElementById(field_default+"_id");
				ctitle = document.getElementById(field_default+"_title");
				requirevalidate = document.getElementById("require_"+i).value == "yes";
				if(cobj != null && !instack(section_errors, field_default)){ 
					ctitle.style.color = "#000";
					cobj.style.display = "none";
				}
				
				if(!this.validateField(field_type, field_object, field_default, i) && requirevalidate){
					processed = false;
					if(cobj != null){
						cobj.style.display = "block";
						ctitle.style.color = "#990000";
						errors.push(field_type);
						if(!instack(section_errors, field_default))
							section_errors.push(field_default);
						if(!instack(error_headers, field_header))
							error_headers.push(field_header);
					}
				}
				if(!instack(headers, field_header)){
					document.getElementById("error_"+field_header).style.display = "none";
					headers.push(field_header);
				}
			}
		}
		
		if(!processed){
			headerlength = error_headers.length;
			for(c = 0; c < headerlength; c++){
				document.getElementById("error_"+error_headers[c]).style.display = "block";
			}
		}
		return processed;
	};
	
	this.validateSection = function(object_index){
		object_len = document.getElementById(object_index+'len').value;
		process = true;
		for(x = 0; x < object_len; x++){
			currenttype = document.getElementById(object_index+'type_'+x).value;
			textobject = document.getElementById(object_index+'_'+x);
			textname = document.getElementById(object_index+'name_'+x).value;
			objectlabel = document.getElementById(object_index+'label_'+x);
			objecterror = document.getElementById(object_index+'error_'+x);
			if(this.validateField(currenttype, textobject, textname, x)){
				objectlabel.style.color = "#555";
				objecterror.style.display = "none";
			}
			else{
				objectlabel.style.color = "#810000";
				objecterror.style.display = "block";
				process = false;
			}
		}
		return process;
	};
	
	this.resetContent = function(obj, defaulttext){
		if(obj.value == defaulttext){
			obj.value = "";
			obj.innerHTML = "";
		}
		
		obj.style.color = "#000";
	};
	
	this.formPost = function(request_type, command_type){
		cform = document.getElementById("registration_form");
		if(command_type == "init")
			cform.target = "target_registration";
		else
			cform.target = "ldwin";
		if(request_type == "Plan" && command_type != "init")
			alert("Please call 1-800-983-5280 to change your plan");
		else{
			cform.action = "http://lockerdome.com/process_post/confirm_account/request_type/"+request_type+"/command_type/"+command_type;
			cform.submit();
		}
};
	
	this.postRequest = function(request_type){
		cform = document.getElementById("registration_form");
		current_plan = document.getElementById("selected_plan").value; 
		cform.action = "http://lockerdome.com/process_post/site_registeration/request_type/"+request_type+"/plan/"+current_plan;
		cform.submit();
	};
	
	this.validateCreditCard = function(){
		if(this.validate())
			this.postRequest("credit_card");
	};
	
	this.validateAccount = function(){
		if(this.validate())
			this.postRequest("account");
	};
	
	this.validateActivation = function(){
		if(this.validateSection("activation"))
			this.postRequest("activation");
	};

	this.sendDetails = function(){
		if(this.validateSection("resend"))
			this.postRequest("send_details");
	};
	
	this.confirmCreditCard = function(){
		if(this.validate())
			this.postRequest("confirm_card");
	};
	
	this.resetPlan = function(obj){
		object_value = obj.options[obj.selectedIndex].innerHTML;
		setup_price = document.getElementById("setup_price").value/1;
		price = document.getElementById("plan_price").value/1;
		cost = price;
		switch(object_value){
			case "quarterly": cost = price*3; break;
			case "annual": cost = price*10; break;
		}
		
		totalprice = setup_price+cost;
		plandetails = document.getElementById("plan_details");
		if(plandetails != null)
			plandetails.innerHTML = "Plan/"+object_value+": $"+cost;
		document.getElementById("total_price").innerHTML = "Total: $"+totalprice;
	};
}

var iValidator = new InputValidator();

