var sqlwin; // az SQL feltetel osszeallito ablak
var lastsql; // az utolso osszerakott SQL
var tf; // az ablakban az SQL feltetel textArea-ja
var lastselectednode; // az kivalasztott mezo a fa strukturaban (null, ha nem
// mezo van kivalasztva
var kodPanel; // a kodokat tartalmazo panel
var kodstore; // kodokat tartalmazo datastore
var sidePanel; //az operator es kod panel befoglaloja
function showSQLwin() {
	var valasz = hezJog('func',1,'csakreg');
	if(valasz){
//		Ext.Msg.alert(valasz['uz1'],valasz['uz2']);
		if (sqlwin == null) 
		    sqlwin = getSQLwin();
		tf.setValue(lastsql);
		sqlwin.show();				
	}
	
/*	
	if(userid==''){
		Ext.Msg.alert('','Csak regisztrált felhasználóknak');
	}
	else{
		if(sajatFunkcio[1] == 1){
			alert('Funkció sorszáma: '+sajatFunkcio[1]);
		  if (sqlwin == null) 
		    sqlwin = getSQLwin();
		  tf.setValue(lastsql);
		  sqlwin.show();
		}
		else
			Ext.Msg.alert('Szükséges funkció: 1','A funkció használatára nem jogosult');
		}
*/
}

function getSQLwin() {
  tf = new Ext.form.TextArea({
    anchor: '100%'
  });
  
  kodPanel = getKodPanel();
  
  
  sidePanel = new Ext.Panel({
    region: 'east',
    layout: 'border',
    width: 115,
    //title : 'SQL feltétel',
    deferredRender: false,
    border: false,
    items: [getOperatorsPanel(), kodPanel]
  
  });
  
  var sw = new Ext.Window({
    title: 'SQL feltétel összeállítása',
    layout: 'border',
    width: 850,
    height: 600,
    closeAction: 'hide',
    iconCls: 'sqldialog',
    plain: true,
    modal: true,
    constrainHeader : true,
    items: [{
      xtype: 'panel',
      region: 'south',
      layout: 'fit',
      title: 'SQL feltétel',
      deferredRender: false,
      border: false,
			height : 150,
      items: [tf]
    },{
      xtype: 'panel',
      region: 'center',
      layout: 'border',
      id: 'fentpanel',
      border: false,
      height: 250,
      minSize: 350,
      maxSize: 500,
      items: [getMezoPanel(), sidePanel]
    }],
    buttons: [{
      text: 'Ellenőrzés',
      iconCls: 'btntest',
      minWidth: 100,
      handler: function() {
        Ext.Ajax.request({
          url: 'phpk/sqlcheck.php',
          success: function(response, opts) {
            var obj = Ext.decode(response.responseText);
            if (obj.success) 
              Ext.Msg.alert("Feltétel ellenőrzés", "A program nem talált hibát a feltételben.");
            else 
              Ext.Msg.alert("Feltétel ellenőrzés", "Hiba az összeállított feltételben.\n" + obj.d);
          },
          failure: function(response, opts) {
            var obj = Ext.decode(response.responseText);
            Ext.Msg.alert("Feltétel ellenőrzés", "Hiba az összeállított feltételben.\n" + obj.d);
          },
          params: {
            f: tf.getValue()
          }
        });
      }
    }, {
      text: 'Törlés',
      iconCls: 'btndelete',
      minWidth: 100,
      handler: function() {
        tf.setValue('');
      }
    }, {
      text: 'Mégsem',
      iconCls: 'cancel',
      minWidth: 100,
      handler: function() {
        sw.hide();
      }
    }, {
      text: 'Rendben',
      iconCls: 'ok',
      minWidth: 100,
      handler: function() {
        sw.hide();
        searchHidak('', '', tf.getValue());
        lastsql = tf.getValue();
      }
    }]
  });
  
  kodPanel.hide();
  return sw;
}

// Az operatorok paneljet hozza letre
function getOperatorsPanel() {
  var panel = new Ext.Panel({
    region: 'west',
    title: 'Operátorok',
    deferredRender: false,
    width: 115,
    border: false,
    items: [getOperators1Panel(), {
      // elvalaszto sav
      xtype: 'panel',
      border: false,
      height: 20
    }, getOperators2Panel()]
  });
  return panel;
}

// az alap operatorok panelje (=,<>, <, ...)
function getOperators1Panel() {
  var op = new Ext.Panel({
    xtype: 'panel',
    deferredRender: false,
    border: false,
    layout: 'table',
    layoutConfig: {
      columns: 2
    },
    defaults: {
      style: 'padding:5px 0px 0px 5px'
    },
    items: [getOpButton('=', 'btnOpEqual'), getOpButton('<>', 'btnOpNotEqual'), getOpButton('<=', 'btnOpLowEqual'), getOpButton('>=', 'btnOpMoreEqual'), getOpButton('<', 'btnOpLow'), getOpButton('>', 'btnOpMore'), getOpButton('(', 'btnOpBrOpen'), getOpButton(')', 'btnOpbrClose')]
  
  });
  return op;
}

// az osszetett operatorok panelje (AND, OR, ....)
function getOperators2Panel() {
  var op = new Ext.Panel({
    xtype: 'panel',
    deferredRender: false,
    border: false,
    layout: 'table',
    layoutConfig: {
      columns: 2
    },
    defaults: {
      style: 'padding:5px 0px 0px 5px'
    },
    items: [getOpButton('AND', 'btnOpEqual'), getOpButton('OR', 'btnOpNotEqual'), getOpButton('NOT', 'btnOpLowEqual'), getOpButton('NULL', 'btnOpMore'), getOpButton('LIKE', 'btnOpMoreEqual'), getOpButton('IN', 'btnOpLow')]
  
  });
  return op;
}

// Az operatorok paneljeire valo gombok letrehozasa
function getOpButton(btntext, btnid) {
  var btn = new Ext.Button({
    text: btntext,
    id: btnid,
    minWidth: 50,
    listeners: {
      click: {
        fn: clickOperatorButton
      }
    }
  });
  var p = new Ext.Panel({
    border: false,
    items: btn
  });
  
  return p;
}

function clickOperatorButton(button, eventObject) {
  //var felt = tf.getValue();
  var felt = button.text;
  
  if ((felt == "AND") || (felt == "OR")) 
    felt = "\n" + felt + "\n";
  else 
    felt += " ";
  insertAtCursor(tf.getEl(), felt);
  /*felt += button.text;
   felt += ' ';
   tf.setValue(felt);
   */
  tf.focus();
}

function getMezoPanel() {
  return new Ext.Panel({
    title: 'Adatbázis mezők',
    region: 'center',
    id: 'mezopanel',
    layout: 'border',
    deferredRender: false,
    border: false,
    items: [getMezoTree(), {
      xtype: 'panel',
      region: 'south',
      height: 35,
      border: false,
      bodyStyle: 'padding:5px 5px 5px 5px',
      
      items: {
        xtype: 'button',
        style: 'align: center',
        text: 'Mezőnév beszúrása',
        handler: function(button, eventObject) {
          if (lastselectnode != null) 
            insertMezo(lastselectnode.id.substr(1, lastselectnode.id.length - 1));
        }
      }
    }]
  });
}

function getMezoTree() {
  var fa = Ext.tree;
  
  var tree = new fa.TreePanel({
    id: 'mezotree',
    animate: true,
    autoScroll: true,
    autoHeight: false,
    bodyBorder: true,
    border: true,
    region: 'center',
    containerScroll: false,
    height: 551,
    loader: new fa.TreeLoader({
      dataUrl: 'phpk/metafa.php'
    }),
    width: 300
  });
  
  // set the root node
  var root = new fa.AsyncTreeNode({
    text: 'EHR',
    draggable: false, // disable root node dragging
    id: 'F0'
  });
  
  tree.setRootNode(root);
  root.expand();
  tree.on("click", function(node) {
    if (node.leaf) {
      lastselectnode = node;
      var smezo = node.id.substr(1, node.id.length - 1);
      kodPanel.show();
      kodstore.reload({
        params: {
          mezo: smezo
        }
      });
      
    }
    else 
      lastselectnode = null;
  });
  tree.on("dblclick", function(node) {
    if (node.leaf) {
      insertMezo(node.id.substr(1, node.id.length - 1));
    }
  });
  return tree;
}

/*
 function downloadedKodok(response) {
 var rsp = Ext.util.JSON.decode(response.responseText);
 if (rsp.kodolt) {
 alert("kodok "+rsp.kodok.length);
 // kodPanel.expand(false);
 
 kodPanel.show();
 var x = Ext.getCmp('mezopanel');
 x.doLayout(true);
 } else {
 alert("nem kodolt");
 // kodPanel.collapse(false);
 kodPanel.hide();
 var x = Ext.getCmp('mezopanel');
 x.doLayout(true);
 }
 }*/
function insertMezo(mezoNev) {
  insertAtCursor(tf.getEl(), mezoNev + " ");
}

function getKodPanel() {
  var columnModel = new Ext.grid.ColumnModel([{
    id: 'kodkod',
    header: "Kód",
		width : 80,
    sortable: true,
    dataIndex: 'kod'
  }, {
    id: 'kodleir',
    header: "Leírás",
    sortable: true,
		width : 350,
    dataIndex: 'leiras'
  }]);
  
  kodstore = new Ext.data.JsonStore({
    url: 'phpk/kodok.php',
    root: 'kodok',
    fields: ['kod', 'leiras'],
    id: 'kod',
    listeners: {
      load: {
        fn: kodstoreOnLoad
      }
    }
  });
  
  // beolvastatjuk az adatokat
  kodstore.load({
    params: []
  });
  
  return new Ext.grid.GridPanel({
    region: 'center',
    width: 350,
    cm: columnModel,
    store: kodstore,
    //				collapsible : false,
    split: true,
    border: false,
    title: "Kódok",
    viewConfig: {
      forceFit: true
    },
    listeners: {
      celldblclick: {
        fn: celldblclickKodPanel
      }
    }
  });
}

function celldblclickKodPanel(grid, rowIndex, columnIndex, eventObject) {
  var record = grid.store.getAt(rowIndex);
  //	var s= tf.getValue();
  insertAtCursor(tf.getEl(), "\"" + record.get('kod') + "\"");
  //	s+=" '"+record.get('kod')+"'";
  //	tf.setValue(s);
}

function kodstoreOnLoad(store, records, options) {
  if (records.length == 0) {
    sidePanel.setWidth(115);
    kodPanel.hide();
  }
  else {
    sidePanel.setWidth(500);
    kodPanel.show();
  }
  
  var x = Ext.getCmp('fentpanel');
  x.doLayout(true);
}

function insertAtCursor(myField, myValue) {
  //IE support
  if (document.selection) {
    myField.focus();
    var sel = document.selection.createRange();
    sel.text = myValue;
  } //MOZILLA/NETSCAPE support
  else 
    if (document.getElementById(myField.id).selectionStart || document.getElementById(myField.id).selectionStart == 0) {
      var startPos = document.getElementById(myField.id).selectionStart;
      var endPos = document.getElementById(myField.id).selectionEnd;
      var v = document.getElementById(myField.id).value;
      
      document.getElementById(myField.id).value = v.substring(0, startPos) +
      myValue +
      v.substring(endPos, v.length);
    }
    else {
      document.getElementById(myField.id).value += myValue;
    }
}

