window.onerror = null;

sender = {
	  script 					: "/pl/script/sender/form_input.php",
	  block     			: "input_global_block",
    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 :	"Message is sending",
    sending_message_error :	"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){
    		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.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;
    	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.defaultSelected = 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]){
      		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
    				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);
        	var global = document.getElementById(sender.block);
        	global.appendChild(div_block);  
        	   		    
				}
			}
		}
			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);
    			var global = document.getElementById(sender.block);
    			global.appendChild(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";
			var global = document.getElementById(sender.block);
			global.appendChild(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";
					var global = document.getElementById(sender.block);
					global.appendChild(div_block_status);
  },
  
		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} );
  		}
		},
		
		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;

    }

}


sender.d(window.addEventListener || window.attachEvent ? window : document.addEventListener ? document : null, "load", sender.init);

