MK.order = {
   dom: {},
   valid: {},
   selectNr:0,
   init: function(e){
      this.dom.selectType = $('o_type');
      addEvent(this.dom.selectType,'change',this.selectType.bind(this));
      this.dom.submit = $('order_submit');
      this.dom.submitCont = $('o_submit');
      //addEvent(this.dom.submit,'submit',this.validate.bind(this));
      _this = this;
      addEvent(this.dom.submit,'submit',this.validate.bind(this));
      this.dom.form = $('order_form');
      this.dom.item = [];
   },
   selectType: function(){
      var s = this.dom.selectType;
      var v = s.options[s.selectedIndex].value;
      this.dom.optCont = $('order_product');
      if(v != '' && v < 4 && v > 0 ){
         this.selectNr = v-1;
         this.show();
      }else{
         this.hide();
      }
   },
   show:function(){
      this.dom.optCont.innerHTML= ' ';

     
      this.create(PRODUCTS);
      this.dom.optCont.style.display = 'block';

      this.dom.submitCont.style.display = 'block'

   },
   hide:function(){
      this.dom.optCont.style.display = 'none';
      this.dom.submitCont.style.display = 'none';
   },
   validate:function(){
 
      var fields = [['o_name','NotEmpty'],
                    ['o_surname','NotEmpty'],
                    ['o_street','NotEmpty'],
                    ['o_city','NotEmpty'],
                    ['o_postcode','NotEmpty'],
                    ['o_email','EMail'],
                    ['o_phone','Int']
                  ];
      
      var isOK2 = this.valid.check(fields,'order_msg_error');
      var isOK1 = this.valid.checkChild(this.dom.item);
      if(isOK1 && isOK2){
         return true;    //this.dom.form.submit();
      }else{
         return false;
      }

   },
   showOption:function(handler,el){
      if(handler.checked)
         el.style.display = 'block';
      else
         el.style.display = 'none';

   },
   create: function(els){
      var el;
      for(var i =0;i< els.length;i++){
         el = els[i];

         var dl = DIV({'class':'line'});
         var lab = LABEL({'class':'item','for':'c_'+el.name,inner:el.label});
         var inp = INPUT({type:'checkbox',id:'c_'+el.name,name:'data['+el.name+']'});
         
         
         var nr = 0;
         if(el.descr[this.selectNr] != undefined)
            nr = this.selectNr;
         var dt = DIV({'class':'opt',inner:el.descr[nr]});

         var dc = DIV({'class':'hide'});
         var s;
         this.dom.item[i] = {hand:inp,childs:[]};
         for(var j = 0;j< el.opt.length;j++){
            s = this.createOption(dc,el.name,el.opt[j]);
            this.dom.item[i].childs[j] = s;
         }
        
         dl.appendChild(lab);
         dl.appendChild(inp);
         dl.appendChild(dt);
         dl.appendChild(dc);
         this.dom.optCont.appendChild(dl);
         
         addEvent(inp,'click',this.showOption.bind(this,inp,dc));
      }
   },
   createOption:function(cont, name,el){
      var di = DIV({'class':'line'});
      var l = LABEL({inner:el.label});
      var o;
      var s = SELECT({name:'data['+name+'_'+el.name+']','class':'input'});

      var nr = 0;
      if(el.option[this.selectNr] != undefined){
         nr = this.selectNr;
      }
      
      this.createSelectOption(s,el.option[nr]);

      di.appendChild(l);
      di.appendChild(s);
      cont.appendChild(di);
      return s;
   },
   createSelectOption:function(cont, el){
      var o;
      o = document.createElement('OPTION');
      cont.appendChild(o);
      for(var i =0;i< el.length;i++){
         o = document.createElement('OPTION');
         o.innerHTML = el[i];
         o.value = el[i];

         cont.appendChild(o);
      }
   }

};
MK.order.valid = {
   css:'input',
   cssE:'error',
   isError:false,
   fieldDescr:null,
   check:function(fs,txt){
      if(txt)
         this.fieldDescr = txt;

      this.isError = false;   
      for(var i = 0;i< fs.length;i++){
         inp = $(fs[i][0]);
         switch(fs[i][1]){
            case "EMail": 
                  isOK = this.checkEMail(inp);
               break;
			   case "NotEmpty": 
                  isOK = this.checkNotEmpty(inp);
				   break;
           	case "Int": 
                  isOK = this.checkInt(inp);
				   break;
            
            default:
               isOK = true;
               //isDefault = true;
         }
         if(isOK)
            this.unselectField(inp);
         else{
            this.selectField(inp);
            this.isError = true;
         }
         if($(this.fieldDescr))
            if(this.isError && $(this.fieldDescr)){
               $(this.fieldDescr).style.display = 'block';
            }else{
               $(this.fieldDescr).style.display = 'none';
            }
      }
      return !this.isError;
   },
   checkChild: function(el){
      this.isError = false;
      var isSelect = false,isChildsSelect = false;

      for(var i = 0;i< el.length;i++){
         if(el[i].hand.checked){
            isSelect = true;
            isChildsSelect = true;
            for(var j = 0;j< el[i].childs.length;j++){
               if(this.checkSelect(el[i].childs[j])){
                  this.unselectField(el[i].childs[j]);
               }else{
                  isChildsSelect = false;
                  this.selectField(el[i].childs[j]);
               }
            }
         }
         if(!isChildsSelect)
            isSelect = false;
      }
           
      if(isSelect){
         $('order_msg_error2').style.display = 'none';
         
      }else{
         $('order_msg_error2').style.display = 'block';
      }
      return isSelect;
   },
   checkSelect:function(sel){
       return sel.options[sel.selectedIndex].value != '' ? true : false;
   },
   selectField : function(field){
      field.className =this.css +' '+this.cssE;
      field.style.background = "#FEEBEB";
    },
   unselectField : function(field){
      field.className =this.css;
      field.style.background = "#fff";
   },
   checkNotEmpty : function(el){
      return (el.value != '');
   },
   checkEMail : function(el){
      var email=/^[A-Za-z0-9]+([_\.-][A-Za-z0-9]+)*@[A-Za-z0-9]+([_\.-][A-Za-z0-9]+)*\.([A-Za-z]){2,4}$/i;
      return (email.test(el.value));
   },
   checkZIP : function(el){
      var ZIP = /^[0-9]{2}[-]{1}[0-9]{3}$/i;
   	return (ZIP.test(el.value));
   },
   checkInt : function(el){
      var int = /^[0-9]+$/;
   	return (int.test(el.value));
   }
}
addEvent(window,'load',function(){
 MK.order.init();
});
     


