/*  PORTAL JS:  CONVERTFORM.JS

  30-JAN-2012   DevRef:04306  ekolijn
*/

var frm_array = [];

function convertForm(formId){
  frm = new Ext.form.BasicForm(formId,{standardSubmit:true});
  var fields = frm.getValues();

  //** Number **//
	Ext.apply(Ext.form.VTypes, {
		'numeric': function(){
			
				/*****************************************************************
				DESCRIPTION: Validates that a string contains only valid numbers.
				PARAMETERS:
				   strValue - String to be tested for validity
				RETURNS:
				   True if valid, otherwise false.
				******************************************************************/
				  var objRegExp  =  /(^-?\d\d*\.\d*$)|(^-?\d\d*$)|(^-?\.\d\d*$)/;
				  return function(strValue){
					  //check for numeric characters
					  return objRegExp.test(strValue);
				  }
	}()
	,'numericText': 'Only numbers are allowed'
  });
  
  if(isIE6 = true){
    extraPX = '0';
  } else {
    extraPX = 2;
  }

  for (key in fields){
    var elems = document.getElementsByName(key);
    for (var i=0;i<elems.length;i++){
      var elem = Ext.get(elems[i].id);
      var isDisabled = false;
	  if(elem && elem.hasClass('disabled')) isDisabled = true;
      var isAllowBlank = true;
      if(elem && elem.hasClass('required')) {
	    isAllowBlank = false;
        elem.removeClass('required')
	  }
	  var regexVal = null;
	  if(elem && elem.hasClass('isemail')) regexVal = 'email';
	  if(elem && elem.hasClass('isnumeric')) regexVal = 'numeric';

      // convert select fields //
      if (elem && elem.hasClass('select')){		
        var elWidth = elem.getWidth();
        //if (elWidth < elem.getWidth()) {elWidth = elem.getWidth();}
        var cb = new Ext.form.ComboBox({
          transform: elem,
          typeAhead: true,
          triggerAction: 'all',
          width: elWidth+20, // +2 to make selectbox same width as inputboxes
          forceSelection: true,
          //emptyText: emptySelectField,
          allowBlank:isAllowBlank,
          tpl:'<tpl for=".">' + '<div class="x-combo-list-item">' + '{text}&nbsp;' + '</div></tpl>',
          disabled: isDisabled
        });
        frm.add(cb);
        cb.clearInvalid();
      } 

      // convert date fields //	  
      else if (elem && elem.hasClass('isdate')){
        if (elem.getWidth() < 100) {elWidth = 200;} else {elWidth = elem.getWidth();}
        var df = new Ext.form.DateField({
            format: localDateFormat,
            applyTo: elem,
            width: elWidth,
            allowBlank: isAllowBlank,
            altFormats: "d/m/Y|d-m-y|d-m-Y|d/m|d-m|dm|dmy|dmY|d"
        });
        frm.add(df);
      }
	  
      if (elem && elem.hasClass('ismonth')){
        if(Ext.version.split('.')[0] < 3){      
          var dg =  new Ext.ux.MonthField({
            applyTo: elem.dom.name,
            monthNames: Date.monthNames,
            format : 'd/m/Y',
            useDayDate : 01
          });
        }else{
          var elId = elem.dom.id;
          var elVal = elem.dom.value;
          elem.dom.removeAttribute('name');
          elem.dom.id = elem.dom.id + '_monthpicker';
          var wrap = elem.wrap({cls:'x-form-field-wrap x-form-monthpicker-wrap'});       
          var dg = new Ext.form.DateField({
            format: 'm/Y',
            applyTo: elem.dom.id,
            icams_hidden_input: elId,
            editable: false,
            name:'',
            altFormats: "d/m/Y|d-m-y|d-m-Y|d/m|d-m|dm|dmy|dmY|d",
            /*readOnly: true,*/
            plugins: 'monthPickerPlugin',
            listeners: {
              select:function(picker, date){
                var formatDate = date.format('d/m/Y');
                Ext.fly(this.icams_hidden_input).dom.value = formatDate;
              }
              ,render:function(){
                /* create hidden input element */
                var hiddenInput = elem.parent().parent().createChild({
                  id: elId,
                  name: elId,
                  value: elVal,
                  cls: 'x-form-file',
                  tag: 'input',
                  type: 'hidden',
                  size: 1
                }); 
              }
            }
          });             
        }          
        frm.add(dg);
   	  }

      
	  // convert resizable inputfield
      if (elem && ( elem.hasClass('resizeable') || elem.hasClass('fixedfont') && elem.dom.className.indexOf("mce") == -1) ){
        var tf = new Ext.form.TextArea({
          applyTo: elem,
          width: elem.getWidth(),
          allowBlank: isAllowBlank
        });        
        if (elem.getWidth() < 100) {elWidth = 200;} else {elWidth = elem.getWidth();}
        if (elem.getHeight() < 25) {elHeight = 65;} else {elHeight = elem.getHeight();}
        var dwrapped = new Ext.Resizable(elem, {
           wrap:true,
           pinned:true,
           width:elem.getWidth()+5, /* +2 to make selectbox same width as inputboxes */
           height:elem.getHeight()+5, /* +2 to make selectbox same width as inputboxes */
           minWidth:elem.getWidth()+5,
           maxWidth: elem.getWidth()+105,
           minHeight: elem.getHeight()+5,
           dynamic: true
        });
        frm.add(tf);
        var maxLength = document.getElementById(elem.dom.id).getAttribute("maxlength");
        if(maxLength > 0) {
          elem.on('keyup', function(){
            var value = this.getValue();
            if(value.length >= maxLength) {
              document.getElementById(this.dom.id).value = value.slice(0, value.length-(value.length-maxLength));
            }
          });
        }  
      }  

      if (elem && elem.hasClass('textfield')){
        var elWidth = elem.getWidth();
        //if (elWidth < elem.getWidth()) {elWidth = elem.getWidth();}
	    var tf = new Ext.form.TextField({
            applyTo: elem,
            width: elWidth,
		    allowBlank: isAllowBlank,
			vtype: regexVal
        });
        frm.add(tf);
	  }
    }
  }
  frm_array.push([frm,formId]);
}

Ext.onReady(function() {
  var icams_inserted = document.getElementById('icams_inserted');

  var selects = Ext.select('select.select');  
  selects.each(function(elem){
    for (var i=0; i < elem.dom.options.length; i++) {
      if (elem.dom.options[i].value == "") {
        elem.dom.options[i].text = "";
      }
    }
  });

  // convert all forms on page
  var forms = icams_inserted.getElementsByTagName('FORM');
  for (var i=0;i<forms.length;i++){
    var selectedForm = forms[i]; 
	
    convertForm(selectedForm);
  }
  
});

