
// consts ----------------------------------------------------------------------

var clErrBackground = ''; // maroon
var clErrText = 'maroon'; // yellow

var jlDate = 3;
var jlButton = 6;
var jlComponentGroup = 10;

var errGroupItemDuplication = 5;


// tools -----------------------------------------------------------------------

// function from http://forums.devshed.com/t39065/s84ded709f924610aa44fff827511aba3.html
// author appears to be Robert Pollard
/*
function sprintf()
{
   if (!arguments || arguments.length < 1 || !RegExp)
   {
      return;
   }
   var str = arguments[0];
   var re = /([^%]*)%('.|0|\x20)?(-)?(\d+)?(\.\d+)?(%|b|c|d|u|f|o|s|x|X)(.*)/;
   var a = b = [], numSubstitutions = 0, numMatches = 0;
   while (a = re.exec(str))
   {
      var leftpart = a[1], pPad = a[2], pJustify = a[3], pMinLength = a[4];
      var pPrecision = a[5], pType = a[6], rightPart = a[7];

      numMatches++;
      if (pType == '%')
      {
         subst = '%';
      }
      else
      {
         numSubstitutions++;
         if (numSubstitutions >= arguments.length)
         {
            alert('Error! Not enough function arguments (' + (arguments.length - 1)
               + ', excluding the string)\n'
               + 'for the number of substitution parameters in string ('
               + numSubstitutions + ' so far).');
         }
         var param = arguments[numSubstitutions];
         var pad = '';
                if (pPad && pPad.substr(0,1) == "'") pad = leftpart.substr(1,1);
           else if (pPad) pad = pPad;
         var justifyRight = true;
                if (pJustify && pJustify === "-") justifyRight = false;
         var minLength = -1;
                if (pMinLength) minLength = parseInt(pMinLength);
         var precision = -1;
                if (pPrecision && pType == 'f')
                   precision = parseInt(pPrecision.substring(1));
         var subst = param;
         switch (pType)
         {
         case 'b':
            subst = parseInt(param).toString(2);
            break;
         case 'c':
            subst = String.fromCharCode(parseInt(param));
            break;
         case 'd':
            subst = parseInt(param) ? parseInt(param) : 0;
            break;
         case 'u':
            subst = Math.abs(param);
            break;
         case 'f':
            subst = (precision > -1)
             ? Math.round(parseFloat(param) * Math.pow(10, precision))
              / Math.pow(10, precision)
             : parseFloat(param);
            break;
         case 'o':
            subst = parseInt(param).toString(8);
            break;
         case 's':
            subst = param;
            break;
         case 'x':
            subst = ('' + parseInt(param).toString(16)).toLowerCase();
            break;
         case 'X':
            subst = ('' + parseInt(param).toString(16)).toUpperCase();
            break;
         }
         var padLeft = minLength - subst.toString().length;
         if (padLeft > 0)
         {
            var arrTmp = new Array(padLeft+1);
            var padding = arrTmp.join(pad?pad:" ");
         }
         else
         {
            var padding = "";
         }
      }
      str = leftpart + padding + subst + rightPart;
   }
   return str;
}
*/


// megszámolja, hány állásra jelentkezik a látogató
function checkMaxJob( obj ){
  var cboxes = $$("#jobstable input");
  var count = 0;

  cboxes.each( function(c) { if (c.checked == true) count++; } );
  if (count > 5) {
     obj.checked = false;
     alert('Maximum 5 állást jelölhet be!');
     } 
}





// dual combo -----------------------------------------------------------------
/*
function LoadSubItems(objName)
{
  var obj = document.getElementById(objName);
  
  xmlHttp=GetXmlHttpObject();
  xmlHttp.onreadystatechange = LoadSubItemsStateChange;
  xmlHttp.open("POST","jelentkezesi_lap/loadcomboitems.php", true);
  xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  msg = "c="+objName+"&si="+obj.value;
  xmlHttp.send(msg);
}



function LoadSubItemsStateChange()
{
  if(xmlHttp.readyState == reqComplete)
  {
//    alert(xmlHttp.responseText);
    var xotree = new XML.ObjTree();
    var tree = xotree.parseXML(xmlHttp.responseText);
//    alert(printObject(tree));

    objName = tree.data.list.name;
    var obj = document.getElementById(objName);//+'_subCat'

//    output = '';
    obj.selectedIndex = -1;
    obj.length = 0;
//alert(obj.options.length);
//    while ((obj.options.length-1) > 0)
//      obj.options.remove(0);

    for (key in tree.data.items)
    {
      var opt = document.createElement('option');
      opt.text = tree.data.items[key].caption;
      opt.value = tree.data.items[key].id;
      obj.options.add(opt);

//      output += key + ': ' + tree.data.items[key].id+', '+tree.data.items[key].caption+'\n';
    }
    document.getElementById(objName+'_row').style.display = (obj.options.length > 1) ? '' : 'none';
//    alert(output);
  }
}
*/

function LoadSubItems(objName)
{
  var obj = document.getElementById(objName);
  
  xmlHttp=GetXmlHttpObject();
  xmlHttp.open("POST","jelentkezesi_lap/loadcomboitems.php", false);
  xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  msg = "c="+objName+"&si="+obj.value;
  xmlHttp.send(msg);

//alert(xmlHttp.responseText);
  var xotree = new XML.ObjTree();
  var tree = xotree.parseXML(xmlHttp.responseText);

  objName = tree.data.list.name;
  var obj = document.getElementById(objName);//+'_subCat'

  obj.selectedIndex = -1;
  obj.length = 0;
  for (key in tree.data.items)
  {
    var opt = document.createElement('option');
    opt.text = tree.data.items[key].caption;
    opt.value = tree.data.items[key].id;
    obj.options.add(opt);
  }
  document.getElementById(objName+'_row').style.display = (obj.options.length > 1) ? '' : 'none';
}



// form validation -------------------------------------------------------------


// megjelöli a hibás mezőt
function SetErrorStyle(obj)
{
  obj.style.backgroundColor = clErrBackground;
  obj.style.color = clErrText;
  obj.style.fontWeight = 'bold';
}



function RestoreStyle(obj)
{
  obj.style.color = '';
  obj.style.backgroundColor = '';
  obj.style.fontWeight = '';
}



function SendDataToVerify()
{
  xmlHttp=GetXmlHttpObject();
  xmlHttp.open("POST","jelentkezesi_lap/loadcomponentlist.php", false);
  xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  msg = (arguments[0]) ? "group="+arguments[0] : "";
  xmlHttp.send(msg);
//alert(xmlHttp.responseText);

  msg = BuildComponentsXML(xmlHttp.responseText, arguments[0]);

//alert(msg);

  xmlHttp.open("POST","jelentkezesi_lap/validatepage.php", false);
  xmlHttp.setRequestHeader("Content-Type", "text/xml");
  xmlHttp.send(msg);
//alert(xmlHttp.responseText);
  return xmlHttp.responseText;
}



function ProcessErrors(errors)
{
//alert(errors);
  if (errors == '') return 0;
  
  var xotree = new XML.ObjTree();
  var tree = xotree.parseXML(errors);
//alert(printObject(tree));

  var errCount = 0;
  var msg = "";
  for (key in tree.data.items)
  {
//alert(tree.data.items[key].errcode);
//alert(tree.data.items[key].errmsg);
    if ( (tree.data.items[key].errmsg != '') && (errCount == 0) )
    {
      alert(tree.data.items[key].errmsg);
      //document.getElementById("+key+").setfocus()
    }
//alert(tree.data.items[key].name+'_caption'+": "+document.getElementById(tree.data.items[key].name+'_caption'));
    if (tree.data.items[key].errcode != errGroupItemDuplication)
        SetErrorStyle(document.getElementById(tree.data.items[key].name+'_caption'));
    errCount++;
  }
//alert(errCount);
  return errCount;
}



function VerifyComponents()
{
  var errXML = SendDataToVerify(arguments[0]);
  return ((ProcessErrors(errXML) == 0));
}



// groups ----------------------------------------------------------------------

function BuildComponentsXML(xmlHttpResponseText, group)
{
  var xotree = new XML.ObjTree();
  var tree = xotree.parseXML(xmlHttpResponseText);

  var msg = "<?xml version='1.0' encoding='UTF-8'?>\n";
  msg += "<data>\n";
  msg += "<group>"+group+"</group>\n";
  if (typeof(tree.data.items)=="object") {
      for (key in tree.data.items)
      {
        var name = tree.data.items[key].nev;
        // Van, hogy egy jelentkezési lap mező (komponens) több azonos nevű inputból áll
        // tipikusan a radio button, ezeket elemenként küldjük át.
//alert(document.getElementsByName(name).length);
        for (i=0;i<document.getElementsByName(name).length;i++)
        {
          msg += "<item>\n"+
                 "\t<name>"+name+"</name>\n"+
                 "\t<checked>"+document.getElementsByName(name)[i].checked+"</checked>\n"+
                 "\t<value>"+document.getElementsByName(name)[i].value+"</value>\n"+
                 "\t<required>"+tree.data.items[key].kotelezo+"</required>\n"+
                 "\t<mezo_tipus>"+tree.data.items[key].mezo_tipus+"</mezo_tipus>\n"+
                 "</item>\n";
        }
        if ( (tree.data.items[key].mezo_tipus != 0) &&
             (tree.data.items[key].mezo_tipus != jlButton) &&
             (tree.data.items[key].mezo_tipus != jlComponentGroup) )
        {
//        alert(name+'_caption: '+document.getElementById(name+'_caption'));
          if (tree.data.items[key].mezo_tipus == jlDate)
              name = name.substr(0, name.length-3);
          RestoreStyle(document.getElementById(name+'_caption'));
        }
      }
  }
  msg += "</data>\n";
  
  return msg;
}



// új csoport elem
function GroupButtonClick(group)
{
  if (VerifyComponents(group))  
  {
// Egyedi csoport mentése esetén az oldal tartalmának mentése ideiglenes tárolóba
    if (group!=0) {
        xmlHttp=GetXmlHttpObject();
        xmlHttp.open("POST","jelentkezesi_lap/loadcomponentlist.php", false);
        xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        msg = "ignoregroup="+arguments[0];
        xmlHttp.send(msg);
//    alert(xmlHttp.responseText);
        if (xmlHttp.responseText!="") {
            msg = BuildComponentsXML(xmlHttp.responseText, "0");
    
//        alert(msg);
      
            xmlHttp.open("POST","jelentkezesi_lap/storepagetotemp.php", false);
            xmlHttp.setRequestHeader("Content-Type", "text/xml");
            xmlHttp.send(msg);
//        alert(xmlHttp.responseText);
            }
        }

// Az oldal tartalmának session-be mentése
    xmlHttp=GetXmlHttpObject();
    xmlHttp.open("POST","jelentkezesi_lap/loadcomponentlist.php", false);
    xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    msg = "group="+arguments[0];
    xmlHttp.send(msg);
//alert(xmlHttp.responseText);

    msg = BuildComponentsXML(xmlHttp.responseText, arguments[0]);

//alert(msg);
  
    xmlHttp.open("POST","jelentkezesi_lap/storegroup.php", false);
    xmlHttp.setRequestHeader("Content-Type", "text/xml");
    xmlHttp.send(msg);
//alert(xmlHttp.responseText);

    document.location.reload();
  }
}



// csoport elem szerkesztése
function EditGroupItem(group, item)
{
  xmlHttp=GetXmlHttpObject();
  xmlHttp.open("POST","jelentkezesi_lap/edititem.php", false);
  xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  msg = "g="+group+"&i="+item;
  xmlHttp.send(msg);
//alert(xmlHttp.responseText);
  document.location.reload();
}



// csoport elem törlése
function DeleteGroupItem(group, item)
{
  if (confirm("Biztosan törli az elemet?")) {
      xmlHttp=GetXmlHttpObject();
      xmlHttp.open("POST","jelentkezesi_lap/deleteitem.php", false);
      xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
      msg = "g="+group+"&i="+item;
      xmlHttp.send(msg);
//alert(xmlHttp.responseText);
      document.location.reload();
      }
}



function GroupCancelClick()
{
  xmlHttp=GetXmlHttpObject();
  xmlHttp.open("POST","jelentkezesi_lap/cancelgroupitemediting.php", false);
  xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  msg = "";
  xmlHttp.send(msg);
//alert(xmlHttp.responseText);
  document.location.reload();
}



// main ------------------------------------------------------------------------

function jlPostData()
{
  xmlHttp=GetXmlHttpObject();
  xmlHttp.open("POST","jelentkezesi_lap/loadcomponentlist.php", false);
  xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  msg = (arguments[0]) ? "group="+arguments[0] : "";
  xmlHttp.send(msg);
//alert(xmlHttp.responseText);
  
  msg = BuildComponentsXML(xmlHttp.responseText, arguments[0]);

//alert(msg);

  xmlHttp.open("POST","jelentkezesi_lap/storepage.php", false);
  xmlHttp.setRequestHeader("Content-Type", "text/xml");
  xmlHttp.send(msg);
//alert(xmlHttp.responseText);
  return xmlHttp.responseText;
}



// elküldi, mely állásokra jelentkeznek
function PostSelectedJobs()
{
  var cboxes = $$("#jobstable input");
  var jobs = new Array();
  var i = 0;
  cboxes.each( function(c) { if (c.checked == true) { jobs[i++]=c.name; } } );

  var msg = "<?xml version='1.0' encoding='UTF-8'?>\n";
  msg += "<data>\n";
  for (i=0;i<jobs.length;i++)
  {
    msg += "<item>\n"+
           "\t<name>"+jobs[i]+"</name>\n"+
           "</item>\n";
  }
  msg += "</data>\n";

//alert(msg);
  xmlHttp=GetXmlHttpObject();
  xmlHttp.open("POST","jelentkezesi_lap/savejobs.php", false);
  xmlHttp.setRequestHeader("Content-Type", "text/xml");
  xmlHttp.send(msg);
//alert(xmlHttp.responseText);
}



function jlGotoPrevPage()
{
  xmlHttp=GetXmlHttpObject();
  xmlHttp.open("POST","jelentkezesi_lap/prevpage.php", false);
  xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  msg = "";
  xmlHttp.send(msg);
//alert(xmlHttp.responseText);
}



function jlGotoNextPage()
{
  xmlHttp=GetXmlHttpObject();
  xmlHttp.open("POST","jelentkezesi_lap/nextpage.php", false);
  xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  msg = "";
  xmlHttp.send(msg);
//alert(xmlHttp.responseText);
}


function jlPrevPage()
{
  jlGotoPrevPage();
  document.location.reload();
}



function jlNextPage(nextPageIndex, lapTipus)
{
  if (lapTipus == 1)
  {
    switch (nextPageIndex){
      case 6:
        jlGotoNextPage();
        document.location.reload();
        break;
      case 7:
        PostSelectedJobs();
        jlGotoNextPage();
        document.location.reload();
        break;
      default:
        if (VerifyComponents())  
        {
          jlPostData();
          jlGotoNextPage();
          document.location.reload();
        }
    }
  }
  else
  {
//alert(nextPageIndex);
    switch (nextPageIndex){
      case 4:
        jlGotoNextPage();
        document.location.reload();
        break;
      case 5:
        PostSelectedJobs();
        jlGotoNextPage();
        document.location.reload();
        break;
      default:
        if (VerifyComponents())  
        {
          jlPostData();
          jlGotoNextPage();
          document.location.reload();
        }
    }
  }
}



function HideShowGroup(hide, group)
{
  var cboxes = $$('#lap_keret tr.form_csop_'+group);
  cboxes.each( function(c){ c.style.display=hide?'none':''; });
  xmlHttp=GetXmlHttpObject();
  xmlHttp.open("POST","jelentkezesi_lap/hideshowgroup.php", false);
  xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  msg = "g="+group+"&h="+hide;
  xmlHttp.send(msg);
//alert(xmlHttp.responseText);
}


