﻿    var currentFormInstance;
var currentForm;
var isRendered = false;

function createFormInstance(siteId, formUid, languageId, redirect)
{
  top.formUid = formUid;  
  ExtRequest('CreateFormInstance', [siteId, formUid, languageId, redirect], loadFormSucceeded, loadFormFailed, null)
}

function loadFormSucceeded(result)
{
  if(result.responseText == "")
  {
    return;
  }
  
  Ext.QuickTips.init();
  Ext.form.Field.prototype.msgTarget = 'side';
  var bd = Ext.getBody();
  
  try
  {
    eval("result = " + result.responseText + ";");
  }
  catch(ex)
  {
    return;
  }
  
  var evalForm;
  
  eval("evalForm = " + result.extJsDefinition + ";");
  result.extJsDefinition = evalForm;
  var evalDataStore;
  eval("evalDataStore = " + result.dataStore + ";");
  
  result.dataStore = evalDataStore;
  currentFormInstance = result;
  
  currentFormInstance.extJsDefinition.fileUpload = true;
   
  currentForm = new Ext.FormPanel(currentFormInstance.extJsDefinition);
  populateForm(currentForm, currentFormInstance.dataStore , false);
  var el = Ext.get("form_" + currentFormInstance.formUid);
  currentForm.render(el);
  isRendered = true;
  
  if(top.userInstance)
  {
    var more = document.getElementById('form_more_'+top.formUid);
    if(more)
    {
      more.innerHTML = "<br />Toevoegen aan 'Mijn formulieren'&nbsp;&nbsp;<button id='" + top.formUid + "' onclick='addForm(\"" + top.formUid + "\");'>+</button>";
    }
  }
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function loadFormFailed(result)
{
  alert("mislukt!");
}

function persistFormInstance(result)
{
  if(!currentForm.getForm().isValid()) { alert('Formulier is niet correct ingevuld!'); return; }
  var cpCurrentFormInstance = currentFormInstance;
  currentFormInstance.extJsDefinition = "";
  //currentFormInstance.dataStore = JSON.encode(currentFormInstance.dataStore);
  if(currentFormInstance.creationDateOrig) { currentFormInstance.creationDate = currentFormInstance.creationDateOrig }
  currentFormInstance.creationDateOrig = currentFormInstance.creationDate;
  //format is server-locale afhankelijk!!!!!
  //currentFormInstance.creationDate = eval(currentFormInstance.creationDate.replace(/\/Date\((\d+)\)\//gi, "new Date($1)"));
  //currentFormInstance.creationDate = currentFormInstance.creationDate.format("m/d/y");
  currentFormInstance = cpCurrentFormInstance;
  
  var strinstance = json2string(currentFormInstance);
       
  if(!readCookie("votecookie")){
    ExtRequest('UpdateFormInstance', [strinstance], persistSucceeded, persistFailed)
  }
}

function persistSucceeded(res, callbackArgs)
{
  try
  {
    eval("result = " + res.responseText + ";");
    eval("var evalDataStore = " + result.dataStore + ";");
   
    var bd = Ext.getBody();
    isRendered = false;
    result.dataStore = evalDataStore;
    currentFormInstance = result;
        
    var el = Ext.get("form_" + currentFormInstance.formUid);
    var elresult = Ext.get("form_result_" + currentFormInstance.formUid);
    var elbutton = Ext.get("form_button_" + currentFormInstance.formUid);    
    
    el.hide();
    elbutton.hide();
    if (currentFormInstance.redirect != null && currentFormInstance.redirect.length > 0) {
        window.location = currentFormInstance.redirect;
    } else {
        elresult.dom.innerHTML = "Uw verzoek is verzonden!" 
    }
  }
  catch(ex)
  {
    alert(res.responseText);
  }
}

function persistFailed(result)
{
  alert("failed");
}

function populateForm(form, dataObject, addListeners)
{
  var fields = form.items.items;
  var event = "";
  
  for(var i = 0; i<fields.length; i++)
  {
    switch(fields[i].xtype)
    {
      case 'fieldset':
      {
        if(fields[i].sectionId && fields[i].items)
        {
          var splitSection = fields[i].sectionId.split(".");
          if (splitSection.length > 1)
          {
            populateForm(fields[i],dataObject[splitSection[0]][splitSection[1]], false);
          }
          else if(splitSection[0] != "")
          {
            populateForm(fields[i],dataObject[splitSection[0]], false);
          }
          else
          {
            populateForm(fields[i],dataObject, false);
          }
        }
        else
        {
          if(fields[i].items && fields[i].items.items)
          {
            populateForm(fields[i],dataObject, false);
          }
        }
        break;
      }
      case 'label':
        break;
      default:
        if(fields[i].origName == null)
          fields[i].origName = fields[i].name;
        var splitName = fields[i].origName.split(".");
        var obj = null;
        var localDataObject = dataObject;
        if (splitName.length > 1)
        {
          localDataObject = dataObject[splitName[0]];
          fieldValue = localDataObject[splitName[1]];
          fields[i].name = splitName[1];
        }
        else
        {
          fieldValue = localDataObject[fields[i].name];
        }

        fields[i].suspendEvents();
      
        fields[i].dataObject = localDataObject;
        fields[i].originalValue = fieldValue;

        switch(fields[i].xtype)
        {
          case 'checkbox':
            event = "check";
            fields[i].setValue(fieldValue);
            if(fields[i].hasChangeListener != true)
            {
              fields[i].addListener(event, function(field,checked){formCheckFieldChange(field,checked);}); 
              fields[i].hasChangeListener = true;
            }
            break;
          case 'radio':
            event = "check";
            if (fields[i].inputValue == fieldValue)
            {
              fields[i].checked = true;
            }
            if(fields[i].hasChangeListener != true)
            {
              fields[i].addListener(event, function(field,checked){formRadioFieldChange(field,checked);}); 
              fields[i].hasChangeListener = true;
            }
            break;
          case 'combo':
            event = "select";
            fields[i].setValue(fieldValue);
            if(fields[i].hasChangeListener != true)
            {
              fields[i].addListener(event, function(field,record,index){formComboFieldChange(field,record,index);}); 
              fields[i].hasChangeListener = true;
            }
            break;
          case 'datefield':
            event = "change";
            if(fieldValue != null)
            {
              var dt = new Date(fieldValue);
              fields[i].setValue(dt);
            }
            
            if(fields[i].hasChangeListener != true)
            {
              fields[i].addListener(event, function(field,newVal,oldVal){formDateFieldChange(field,newVal,oldVal);}); 
              fields[i].hasChangeListener = true;
            }
            break;
          case 'textarea':
            fieldValue = br2rn(fieldValue);
            if (splitName.length > 1)
            {
              localDataObject[splitName[1]] = fieldValue;
            }
            else
            {
              localDataObject[splitName[0]] = fieldValue;
            }
          default:
            event = "change";
            fields[i].setValue(fieldValue);
            if(fields[i].hasChangeListener != true)
            {
              fields[i].addListener(event, function(field,newVal,oldVal){formFieldChange(field,newVal,oldVal);}); 
              fields[i].hasChangeListener = true;
            }
        }
        showSection(fields[i], fieldValue);
        fields[i].resumeEvents();
        break;
      }
  }
}

function setChangeState()
{
  if(currentFormInstance._UpdateState == "" && isRendered)
  {
    currentFormInstance._UpdateState = "Change";
  }
}

function formComboFieldChange(field,record,index)
{
  setChangeState();
  var obj = field.dataObject;
  toggleSection(field, record.data.value, obj[field.name])  
  obj[field.name] = record.data.value;
}


function formFieldChange(field,newVal,oldVal)
{
  setChangeState();
  var obj = field.dataObject;
  obj[field.name] = newVal;
  toggleSection(field, newVal, oldVal)  
}

function formDateFieldChange(field,newVal,oldVal)
{
  setChangeState();
  var obj = field.dataObject;
  obj[field.name] = newVal.toString();
  toggleSection(field, newVal, oldVal)  
}

function formCheckFieldChange(field,checked)
{
  setChangeState();
  var obj = field.dataObject;

  if(obj[field.name] != checked)
  {
    obj[field.name] = checked;
    toggleSection(field, checked, !checked)  
  }
}

function formRadioFieldChange(field,checked)
{
  setChangeState();
  var obj = field.dataObject;

  if(checked==true)
  {
    toggleSection(field, field.inputValue, obj[field.name])  
    obj[field.name] = field.inputValue;
  }
}

function toggleSection(field, newVal, oldVal)
{
  hideSection(field, oldVal);
  showSection(field, newVal);
}

function hideSection(field, value)
{
  var elem = getElement(field, value);
  if(elem != null)
  {
    elem.hide();
  }
}

function showSection(field, value)
{
  var elem = getElement(field, value);
  if(elem != null)
  {
    elem.show();
  }
}

function getElement(field, value)
{
  var cases = field.cases;
  if (cases != null)
  {
    var caseItem = cases[value];
    if (caseItem != null)
    {
      var elems = currentForm.find("sectionId", caseItem);
      if(elems.length != 0)
      {
        return elems[0];
      }
    }
  }
 
  return null;
}

Ext.override(Ext.form.Field, {
  afterRender : function() {  
    if(this.helpTextTitle){

      var label = findLabel(this);

      if(label)
      {                 	  
        var helpImage = label.createChild({
     			tag: 'img', 
     			src: 'images/icons/info_ico.gif',
     			style: 'margin-bottom: 0px; margin-left: 5px; padding: 0px;',
     			width: 15,
     			height: 15
     		});    
             		        
        Ext.QuickTips.register({
          target:  helpImage, //this.el,
          title: this.helpTextTitle,
          text: this.helpText,
          enabled: true
        });
      }
    }
    if(this.required){

      var label = findLabel(this);

      if(label)
      {                 	  
        var helpImage = label.createChild({
     			tag: 'img', 
     			src: 'images/icons/required_ico.gif',
     			style: 'margin-bottom: 0px; margin-left: 5px; padding: 0px;',
     			width: 15,
     			height: 15
     		});    
             		        
        Ext.QuickTips.register({
          target:  helpImage, //this.el,
          //title: this.required,
          text: this.required,
          enabled: true
        });
      }
    }
    Ext.form.Field.superclass.afterRender.call(this);    
    this.initEvents();  
  }
});

var findLabel = function(field) 
{
  var wrapDiv = null;
  var label = null

  //find form-item and label
  wrapDiv = field.getEl().up('div.x-form-item');
  if(wrapDiv) 
  {
      label = wrapDiv.child('label');        
  }
  if(label) {
      return label;
  } 
}

function showFormHelp()
{
  if(!currentFormInstance.helpTitle)
  {
    Ext.Msg.alert("Help bij dit formulier","Geen help beschikbaar, dus zoek maar lekker uit.");
  }
  else
  {
    Ext.Msg.alert(currentFormInstance.helpTitle, currentFormInstance.helpDescription)
  }
}