﻿function checkfield(fieldid, fieldvalue, ajax_url, formid, uuid, errorDisplayTime,
            errorFieldBorderColor, errorFieldBackgroundColor, 
            normalFieldBorderColor, normalFieldBackgroundColor,
            errorMessageOffsetx,errorMessageOffsety){
    var ajaxUrl = ajax_url;
    ajaxUrl +="?fieldvalue="+encodeURIComponent(fieldvalue)+"&action=checkfield&fieldid="+fieldid+"&formuuid="+uuid+"&formid="+formid;
    
    new Ajax.Request(ajaxUrl,
        {
            method:'get',
            onSuccess: function(transport){
            
                          var response = transport.responseText;
                          //alert(response);
                          var responseMessageAusdruck = /<message>([^<]*)/;
                           var uuidausdruck = /<uuid>([^<]*)/;
                          var reffalseausdruck = /<ReferencedFailedFields>([^<]*)/;
                          var refokausdruck = /<ReferencedCorrectFields>([^<]*)/;
                         
                          var uuiderg = uuidausdruck.test(response);
                          if (uuiderg){
                              var uuidcomp = uuidausdruck.exec(response);
                              uuiderg = (uuidcomp[1]==uuid);
                          }
                          
                          var responseMessageTest = responseMessageAusdruck.test(response);
                          if (responseMessageTest){
                            var responseMessage = responseMessageAusdruck.exec(response);
                            var responseMess = responseMessage[1];
                          }
                          var reffalsetest = reffalseausdruck.test(response);
                          //alert("reffalsetest:" + reffalsetest); 
                          if (reffalsetest){
                            var reffalse = reffalseausdruck.exec(response);
                            //alert("reffalse:" + reffalse); 
                            var reffalsearray = reffalse[1].split(",");
                            
                              // mark other fields
                            for (var i = 0; i < reffalsearray.length; i++) {
                                //alert(reffalsearray[i]);
                                $(reffalsearray[i]).setStyle({ 
                                      borderColor:  errorFieldBorderColor,
                                      backgroundColor: errorFieldBackgroundColor 
                                  });
                            }
                          }
                          var refoktest = refokausdruck.test(response);
                          if (refoktest){
                             var refok= refokausdruck.exec(response);
                             var refokarray = refok[1].split(",");
                             // demark other fields
                             for (var i = 0; i < refokarray.length; i++) {
                                 //alert(refokarray[i]);
                                  $(refokarray[i]).setStyle({ 
                                    borderColor: normalFieldBorderColor,
                                     backgroundColor: normalFieldBackgroundColor
                                });
                             }
                          }
                            
                          
                          if (responseMessageTest && !uuiderg){
                              var a=getPosition($(fieldid));
                              $(fieldid).setStyle({ 
                                  borderColor:  errorFieldBorderColor,
                                  backgroundColor: errorFieldBackgroundColor 
                              });
                              var positionx = '' + (a.y-errorMessageOffsety) + 'px';
                              var positiony = '' + (a.x+errorMessageOffsetx) + 'px';
                              $(fieldid+'_error').setStyle({
                                              top: positionx,
                                              left: positiony
                                                       });
                              $(fieldid+'_errortext').innerHTML = responseMess;
                              new Effect.Appear($(fieldid+'_error'));
                              //$(fieldid+'_error').show();
                              window.setTimeout("hideError('" + fieldid + "')", errorDisplayTime);
                              $(uuid+'_commit1').removeClassName('enabled');
                            $(uuid+'_commit1').addClassName('disabled');
                          } else {
                            //if ($(fieldid).readAttribute('type')=='text'){
                                $(fieldid).setStyle({ 
                                    borderColor: normalFieldBorderColor,
                                    backgroundColor: normalFieldBackgroundColor
                                });
                                  //$(fieldid+'_error').setStyle({ visibility: 'hidden' });
                                  $(fieldid+'_error').hide();
                                  $(fieldid+'_errortext').innerHTML = '';
                              //} // if readAttribute(type) == text
                          }
                          
                          //alert("uuiderg:" + uuiderg);
                          if (uuiderg){
                            $(uuid+'_commit1').removeClassName('disabled');
                              $(uuid+'_commit1').addClassName('enabled');
                          }
                       },
            onFailure: function(){ alert('Something went wrong...') 
                       }
         });
}

function hideError(fieldid){
    new Effect.Fade($(fieldid+'_error'));
    //$(fieldid+'_error').setStyle({ visibility: 'hidden' });
}

function setMandatoryColor(fieldid, fieldvalue, normal, highlighted){
    if (fieldvalue.length > 0)
        document.getElementById(fieldid).style.color=normal;
    else
        document.getElementById(fieldid).style.color=highlighted;
}

function showHelpText(fieldid, parentid, text){
    if (text.length>7){  // im Leerstring steht '<p></p>'
        $(parentid).show();
        document.getElementById(fieldid).innerHTML= text;
    } else {
        $(parentid).hide();
    }
}

function commit1( ajax_url, formid, uuid, outerdiv){
        
    var ajaxUrl = ajax_url;
    ajaxUrl +="?action=commit1&formuuid="+uuid+"&formid="+formid;
    
    if ($(uuid+'_commit1').hasClassName('enabled')){
        new Ajax.Updater(outerdiv, ajaxUrl,
            {
                method:'get'
            });
     }
}

function reset( ajax_url, formid, uuid, outerdiv){
        
    var ajaxUrl = ajax_url;
    ajaxUrl +="?action=reset&formuuid="+uuid+"&formid="+formid;    
    
    new Ajax.Updater(outerdiv, ajaxUrl,
        {
            method:'get'
        });
     
}

function commit2( ajax_url, formid, uuid, outerdiv){
        
    var ajaxUrl = ajax_url;
    ajaxUrl +="?action=commit2&formuuid="+uuid+"&formid="+formid;        
    
    new Ajax.Request(ajaxUrl,
        {
            method:'get',
            onSuccess: function(transport){
                          var response = transport.responseText;
                          document.getElementById(outerdiv).parentNode.removeChild(document.getElementById(outerdiv));
                       },
            onFailure: function(){ alert('Something went wrong...') 
                       }
         });
}

function goback( ajax_url, formid, uuid, outerdiv){
        
    var ajaxUrl = ajax_url;
    ajaxUrl +="?action=goback&formuuid="+uuid+"&formid="+formid;
    
    new Ajax.Updater(outerdiv, ajaxUrl,
        {
            method:'get'
        });
}

/* --------- getPosition --------*/
function getPosition(obj) {
  var pos = { x:0, y:0 };
  do {
    pos.x += obj.offsetLeft;
    pos.y += obj.offsetTop;
  } while (obj = obj.offsetParent);
  return pos;
}
