/*
	Класс для обработки обязательных полей форм
*/


function requiredForm(button_id, markLabels){
	this.button_id=button_id;
	this.fields={};
	this.activateFlag=true;	// если true - то все проверки работают, а если false - то отключаем их

	if (typeof markLabels == "undefined"){
		this.markLabels=true;
	}
}

requiredForm.prototype.setActivateFlag = function(flag){
	this.activateFlag=flag;
	this.checkFields();
}

requiredForm.prototype.setFields = function(fields){
	this.fields=fields;
}

requiredForm.prototype.setListeners = function(){

	for(var key in this.fields) {
			this.setListener(key);

			if(this.fields[key].attached){
				for(var key2 in this.fields[key].attached) {
					this.setListener(key2, key);
				}
			}
	}

}


requiredForm.prototype.setListener = function(elemId, labelId){

	if(!labelId){
		labelId=elemId;	// labelId - ID группы, elemId - ID элемента ввода
	}

	var self = this;
	var tagName = (document.getElementById(elemId+"_form")).tagName.toLowerCase();


	if(tagName=='select'){
		$('#'+elemId+'_form').bind("change", function(){
			self.checkField(labelId);
		});	
	}else if(tagName=='input'){
		if($('#'+elemId+'_form').attr("type")=="checkbox"){
			$('#'+elemId+'_form').bind("click", function(){
			self.checkField(labelId);
		});
		}else if($('#'+elemId+'_form').attr("type")=="text"){
			$('#'+elemId+'_form').live("keyup", function(){
			self.checkField(labelId);
		});
		}
	}else if(tagName=='textarea'){
		$('#'+elemId+'_form').live("keyup", function(){
			self.checkField(labelId);
		});
	}
}

requiredForm.prototype.checkButton = function(){
	var tagName = (document.getElementById(this.button_id)).tagName.toLowerCase();

	var resultCheck=true;
	for(var key in this.fields) {
		if(!this.fields[key].status){
			resultCheck=false;
		}
	}

	if(this.activateFlag){
		if(tagName=="input"){
			if(resultCheck==true){
				$("#"+this.button_id).removeAttr("disabled");
			}else{
				$("#"+this.button_id).attr("disabled","disabled");
			}
		}else{
			if(resultCheck==true){
				$("#"+this.button_id).removeClass(this.button_id+"_disable").addClass(this.button_id);
			}else{
				$("#"+this.button_id).removeClass(this.button_id).addClass(this.button_id+"_disable");
			}
		}
	}
}


requiredForm.prototype.checkField = function(elemId){
var resultCheck = true;
		if($('#'+elemId+'_form').attr('type')=="checkbox"){
			var fieldValue = $('#'+elemId+'_form').attr("checked");
		}else{
			var fieldValue = $('#'+elemId+'_form').val();
		}

		var check=this.valid(fieldValue, this.fields[elemId].checkType);

		if(this.fields[elemId].attached){
			for(var key in this.fields[elemId].attached) {
				if(!this.valid($('#'+key+'_form').val(), this.fields[elemId].attached[key].checkType)){
					check=false;
				}
			}	
		}

		if(this.markLabels){
			if(!check){
				$('#'+elemId+'_label').addClass("req");
			}else{
				$('#'+elemId+'_label').removeClass("req");
			}
		}
	this.fields[elemId].status=check;

	this.checkButton();
}

requiredForm.prototype.checkFields = function(){
	var resultCheck = true;
	if(this.activateFlag){
		for(var key in this.fields) {
			this.checkField(key);
		}
	}
}



requiredForm.prototype.activate = function(){
	this.checkFields();
	this.setListeners();
}

requiredForm.prototype.valid = function(fieldValue, checkType){
//alert(fieldValue+" "+checkType);
	var check;
	if (checkType=="email"){
		check = this.isValidEmail(fieldValue);
	} else if(checkType=="non_empty") {
			check = this.isEmpty(fieldValue);
	} else if(checkType=="non_0") {
			check = this.isNumber(fieldValue);
	} else if(checkType=="checked") {
			check = this.isChecked(fieldValue);
	}
	return check;
}

/*
	Проверка корректности e-mail
*/
requiredForm.prototype.isValidEmail = function(email, strict){
	if ( !strict ) email = email.replace(/^\s+|\s+$/g, '');
	return (/^([a-z0-9_\-]+\.)*[a-z0-9_\-]+@([a-z0-9][a-z0-9\-]*[a-z0-9]\.)+[a-z]{2,4}$/i).test(email);
}

requiredForm.prototype.isEmpty = function(value){
	if(trim(value)!=""){
		return true;
	} else {
		return false;
	}
}

requiredForm.prototype.isNumber = function(value){
	if(value!=0){
		return true;
	} else {
		return false;
	}
}

requiredForm.prototype.isChecked = function(value){
	return value;
}





/**
 * Класс для работы с кнопками class buttons
 */
function buttons(buttonId, clickFunction){
	this.buttonClass=buttonId;
	this.clickFunction=clickFunction;
	var self=this;

	$("#"+buttonId).hover(
		function () {
			if($(this).hasClass(self.buttonClass)){
				$(this).removeClass(self.buttonClass).addClass(self.buttonClass+"_hover");
			}
		},
		function () {
			if($(this).hasClass(self.buttonClass+"_hover")){
				$(this).removeClass(self.buttonClass+"_hover").addClass(self.buttonClass);
			}
		}
	);

	$("."+this.buttonClass+"_hover").live("click", this.clickFunction);
}

$(document).ready(function(){


});