window.onerror = null;
sender = {
	 script 					: "/script/sender/form_input.php",
	 block     			: "input_global_block",
	 temp_source  : '',
     splash_id     			: "splash_global_block",
     splash_button_id  : "splash_button_close",
     label_prefix    : "input_label_block_", // префикс для блока описания поля
    source_prefix   : "input_source_block_", // префикс для блока поля
    check_prefix    : "input_check_block_", // префикс для блока описания ошибки поля
    status_prefix   : "input_check_block", // префикс для блока статуса 
    label_class     : "input_label", // класс для блока описания поля
    source_class    : "input_source", // класс  для блока поля
    check_class     : "input_check", // класс для блока описания ошибки поля
    input_class     :	"input_block",
    button_class    :	"input_button",
    button_id    :	"input_button_id",
    status_class    :	"input_status",
    sending_message :	"<strong>Ваше сообщение отправлено. В ближайшее время мы постараемся ответить по указанному Вами адресу электронной почты или контактному телефону.</strong>",
    sending_message_error :	"Ошибка! Сообщение отправить не удалось.",
    elem				 		: Array(),
	
    elem_error 			: Array(),
    elem_button			: Array(),
    elem_value 			: Array(),
    
    loadinfo_id: "input_loadinfo",
    
    source_class_check_true : "true", 
    source_class_check_false : "false",
    source_class_check : "uncheck",
        
    error_write: function(el, bool, text){
    	if (bool){
    		document.getElementById(sender.check_prefix+el.id).innerHTML += text + '<br />';
    	}
    }, 
    
    error_clear: function(el){
    		var el_check = document.getElementById(sender.check_prefix+el.id);
    		if (el_check){
    		document.getElementById(sender.check_prefix+el.id).innerHTML="";
				el.className = sender.source_class_check;
			}
    }, 
    error: function(el,bool){
    	if (bool){
    		document.getElementById("input_check_block_"+el.id).style.visibility = "visible";
				el.className = sender.source_class_check_false;
			} else {
				document.getElementById("input_check_block_"+el.id).style.visibility = "hidden";
				el.className = sender.source_class_check_true;
			}
    },
    clearAll : function(){
  		for (var i = 0; i < sender.elem.length; i++) {
     		var arg = sender.elem[i];
      	if (arg[0]){
      		var el = document.getElementById(arg[0]);
      		el.className = sender.source_class_check;
      		el.value = ""; 
      		sender.error_clear(el);
      		if (sender.elem_value[el.id])		sender.elem_value[el.id]['value'] = el.value;
      	}
    	}
  	},   
    checkAll : function(e){
    	var error = false;
  		for (var i = 0; i < sender.elem.length; i++) {
     		var arg = sender.elem[i];
      	if (arg[0]){
      		var el = document.getElementById(arg[0]);
      		if (sender.check(el)) error=true;
      	}
    	}
    	return error;
  	},
    check : function(e){
    	if (e.id) var el=e;
    		else var el = window.event ? window.event.srcElement : e.currentTarget;
    	var is_error_all = false;
    	if (!sender.elem_value[el.id]) return false;
    	sender.elem_value[el.id]['value'] = el.value;
    	sender.error_clear(el);
    	for (var i = 0; i < sender.elem_error.length; i++){
    		var arg = sender.elem_error[i];
    		if (arg[0]==el.id){
    			var is_error = false;
    			switch(arg[2]) {
    				case "is_name":
    					is_error = (el.value.match(/[\wа-яА-Я]+/))?false:true;
    				break
    				case "is_email_or_clear":
   					is_error = (el.value.match(/^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,5}$/)||el.value=='') ? false : true;
    				break
    				case "is_email":
    					is_error = (el.value.match(/^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,5}$/)) ? false : true;
    				break	
    				case "regexp":
    				if (arg[3])
    					is_error = (el.value.match('/'+arg[3]+'/')) ? false : true;
    				break		
    				case "min_length":
    					var value = arg[3];
    					is_error = (el.value.length >= value) ? false : true;
    				break
    				case "max_length":
    					var value = arg[3];
    					is_error = (el.value.length <= value) ? false : true;
    				break
    				case "is_select":
    					var value = arg[3];
    					is_error = (el.value != value) ? false : true;
    				break
    			}
    			sender.error_write(el,is_error,arg[1]);
    			if(is_error) is_error_all = true; 		
    		}
    	}
    	sender.error(el,is_error_all);
    	return is_error_all;
    },
    add_button : function(){
    	sender.elem_button=sender.add_button.arguments;
    },
    add : function(){
    	sender.elem.push(sender.add.arguments);
    },
    add_error : function(){
    	sender.elem_error.push(sender.add_error.arguments);
    },
    init : function(){
      for (var i = 0; i < sender.elem.length; i++) {
     		var arg = sender.elem[i];
    switch(arg [2]) {
    	case "option":
    		if (document.getElementById(arg[0])){
        			var input_source = document.createElement("option");
        			input_source.value = input_source.text = input_source.innerHTML = arg[1];
        			input_source.selected = arg [3] ? arg [3] : false;
    					var parent_select = document.getElementById(arg[0]);
    					parent_select.appendChild(input_source);
    		}
        		break
        		case "hidden":
        			var input_source = document.createElement("input");
    					input_source.id = arg [0];
    					input_source.type = 'hidden';
    					input_source.value = arg[3];
    					sender.elem_value[arg[0]] = Array();
      				sender.elem_value[arg[0]]['title'] = arg[1];
      				div_block_source.appendChild(input_source);
        		break
      default:  		
      if (arg[0]){
      		switch(arg [2]) {
    				case "span":
    						var div_block = document.createElement(arg [2]);
				    		div_block.id = arg [0];
							div_block.innerHTML = arg [1];
    				break
    				case "div":
    						var div_block = document.createElement(arg [2]);
				    		div_block.id = arg [0];
							div_block.innerHTML = arg [1];
    				break
    				default:
				      		sender.elem_value[arg[0]] = Array();
				      		sender.elem_value[arg[0]]['title'] = arg[1];
				        	var div_block = document.createElement("div");
				        	div_block.className = sender.input_class;
				        	var div_block_label = document.createElement("div");
				        	div_block_label.className = sender.label_class;
				        	div_block_label.id = sender.label_prefix+arg [0];
				        	div_block_label.innerHTML = arg[1];
				        	div_block.appendChild(div_block_label);
				        	var div_block_source = document.createElement("div");
				        	div_block_source.className = sender.source_class;
				        	div_block_source.id = sender.source_prefix+arg [0];
				        	switch(arg [2]) {
				    				case "textarea":
				    					var input_source = document.createElement("textarea");
				    					input_source.id = arg [0];
				    					input_source.cols = arg [3] ? arg [3] : 5;
				    					input_source.rows = arg [4] ? arg [4] : 5;
				        		break
				        		break
				    				case "text":
				        			var input_source = document.createElement("input");
				    					input_source.id = arg [0];
				    					input_source.type = 'text';
				    					input_source.className = sender.source_class_check;
				        		break
				        		case "select":
				        			var input_source = document.createElement("select");
				    					input_source.id = arg [0];
				        		break
				  				}
				  				div_block_source.appendChild(input_source);
					        	div_block.appendChild(div_block_source);
					        	sender.d(input_source,"blur", sender.check);
					        	var div_block_check = document.createElement("div");
					        	div_block_check.className = sender.check_class;
					        	div_block_check.id = sender.check_prefix+arg[0];
					        	div_block.appendChild(div_block_check);
				  			break
				  			}
        	
        	 sender.add_global(div_block);
				}
			}
		}
		
		if (document.getElementById(sender.splash_id)) {
				var input_source = document.createElement("input");
    			input_source.type = 'button';
    			input_source.className = sender.button_class;
    			input_source.id = sender.splash_button_id;
    			input_source.value = 'Закрыть';
    			sender.d(input_source,"click", sender.splash_close);
			    sender.add_global(input_source);
			}
			
			var arg_button = sender.elem_button;		
			if (arg_button[0]){
				var input_source = document.createElement("input");
    			input_source.type = 'button';
    			input_source.className = sender.button_class;
    			input_source.id = sender.button_id;
    			input_source.value = arg_button [0];
    			sender.d(input_source,"click", sender.send);
			    sender.add_global(input_source);				
			}
						
			var div_block_loadinfo = document.createElement("div");
        	div_block_loadinfo.id = sender.loadinfo_id;
			div_block_loadinfo.style.visibility = "hidden";
			div_block_loadinfo.innerHTML = "&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp";

			sender.add_global(div_block_loadinfo);
			var div_block_status = document.createElement("div");
        	div_block_status.className = sender.status_class;
					div_block_status.id = sender.status_prefix;
					div_block_status.style.visibility = "hidden";
					sender.add_global(div_block_status);

  },
  	
  	selected :function(){
  			var arg = sender.selected.arguments;
  			var parent_select = document.getElementById(arg[0]);
  			if (parent_select){
        			switch(arg [1]) {
    					case "value":
    					  for (var i = 0; i < parent_select.options.length; i++) {
    					 	 if (parent_select.options[i].value == arg [2]) 
    					 	 	setTimeout( function(){parent_select.options[i].selected=true;}, 1 );
    					  }
    					break
    					default:
   						 	setTimeout( function(){parent_select.options[arg [2]].selected = true;}, 1 );
    					break
        		 }
    		}
  	},
  	
		send : function(){
			if (!sender.checkAll()){
			var req = new JsHttpRequest();
    	req.onreadystatechange = function() {
      	document.getElementById(sender.loadinfo_id).style.visibility = "visible";
      	document.getElementById(sender.button_id).style.disabled = true;
      	if (req.readyState == 4){
      		if (req.responseJS) {
      			sender.set_status(sender.sending_message);
      			sender.clearAll();
      	 	} else {
      	 		sender.set_status(sender.sending_message_error);
      	 	}
    		}
    	}
    	req.open(null, sender.script, true);
    	req.send( {'value':sender.elem_value} );
  		}
		},
		
		add_global: function(html){
			   if (document.getElementById(sender.block)){
        		var global = document.getElementById(sender.block);
        		global.appendChild(html);  
        	 }	else {
        	 	var source = document.createElement("div");
        	 	source.id = sender.splash_id;
        	 	sender.d(source,"click", sender.splash_close);
        	 	var source1 = document.createElement("div");
        	 	 source1.className = 'body';
        	 	source1.id = sender.splash_id+'_dialog';
        	 	var source2 = document.createElement("div");
        	 	source2.id = sender.block;
        	 	source2.appendChild(html);
        	 	source1.appendChild(source2);
        	 	source.style.display = 'none';
        	 	source1.style.display = 'none';
        	 	document.body.appendChild(source);
        	 	document.body.appendChild(source1);
        	 }	
			
		},
		
		set_status : function(message){
			 document.getElementById(sender.button_id).style.disabled = false;
			 document.getElementById(sender.loadinfo_id).style.visibility = "hidden";
			 document.getElementById(sender.status_prefix).style.visibility = "visible";
			 document.getElementById(sender.status_prefix).innerHTML = message;
		},
    d : function(o, e, a){

      if (o.addEventListener) return o.addEventListener(e, a, false);

      else if (o.attachEvent) return o.attachEvent("on" + e, a);

      else return false;

    },
    
    splash:function(id){
    	sender.clearAll();
    	document.getElementById(sender.splash_id).style.display = 'block';
    	document.getElementById(sender.splash_id+'_dialog').style.display = 'block';   	
    },
    
    splash_close:function(){
    	sender.clearAll();
    	document.getElementById(sender.splash_id).style.display = 'none';
    	document.getElementById(sender.splash_id+'_dialog').style.display = 'none';
    }

}


sender.d(window.addEventListener || window.attachEvent ? window : document.addEventListener ? document : null, "load", sender.init);
