/**
 * @author Crux
 */
Function.prototype.bind = function(object) {
    var method = this
    return function() {
        return method.apply(object, arguments) 
    }
}
var req = new Subsys_JsHttpRequest_Js();
var $form = function(o, Attr){
  return new $mvaf(o, Attr)
} 
function $mvaf(o, Attr){
	
  if(typeof(o) == "string") this.f = document.getElementById(o);
    else this.f = o;
  if(!Attr) Attr = new Array();
  this.FRequest = (Attr.request) ? Attr.request : null; // контейнер для выполняемой функции, после отработки
  this.FEvent = (Attr.event) ? Attr.event : null; // контейнер для выполняемой функции, во время отработки
  this.method = (this.f.method) ? this.f.method : "GET"; // метод отправки данных POST | GET (GET по умолчанию)
  this.action = this.f.action; // урл ajax файла
  this.flagEvent = true; 
  return this;
}
$mvaf.prototype = {
  GenArray : function(){ // массив данных формы
    var fm = this.f.elements;
    var returnArray = new Array();
    for(var i = 0; i < fm.length; i++){
  	  switch(fm[i].type.toLowerCase()){
  	    case"text": case"hidden": case"button": case"submit": case"password": case"file": case"select-one": case"textarea":
  	      returnArray[fm[i].name] = fm[i].value
  	      break;
  	    case"radio": case"checkbox":
  	      if(fm[i].checked) returnArray[fm[i].name] = fm[i].value
  	      break;
  	    default:break;
  	  }
    }
    return returnArray;
  },
  submit : function(flag){
	if(flag == true) flag = true;
	  else if (flag == false) flag = false;
	    else flag = true;
  	req.onreadystatechange = function(){
	  if (req.readyState == 4){
	  	if(req.status == "200")	this.backEnd(req.responseText, req.responseJS);
	    else alert('Ошибка:' + req.status);
	  }
	  else if (this.flagEvent) {
	  		this.event();
			this.flagEvent = false;
	  	}
	}.bind(this);
	req.open(this.method, this.action, flag);
    req.send(this.GenArray());
	return false;
  },
  /*функция обработки входящих данных.*/
  backEnd : function(Text, reqJS){
  	if(this.FRequest) eval(this.FRequest)(Text, reqJS, this.f);
	return this;
  },
  event : function(){
  	if(this.FEvent) eval(this.FEvent)(this.f);
  }
}


