//language
var jslanguage = 'rus';
var jsdebugmode = false;

if (jslanguage == 'rus')
{
  var str_error = 'Ошибка';
  var str_info = 'Информация';
  var str_ok = 'OK'
  var str_save = 'Сохранить'
  var str_cancel = 'Отмена';
  var str_close = 'Закрыть';
  var str_yes = 'Да';
  var str_delete = 'Удалить';
  var str_deleteprompt = 'Вы действительно хотите удалить эту запись?';
  var str_ivalidanswer = 'Неверный ответ от сервера';
  var str_dialogwait = 'Пожалуйста подождите...';
  var str_upload = 'Закачка';
  var str_uplerr = 'Ошибка закачки';
  var str_uplerr_unknown = 'Неизвестная ошибка';
  var str_uplerr_http = 'Ошибка HTTP';
  var str_uplerr_failed = 'Закачка неудалась';
  var str_uplerr_io = 'Ошибка ввода-вывода';
  var str_uplerr_security = 'Проблемы безопасности';
  var str_uplerr_limit = 'Лимит закачек исчерпан';
  var str_uplerr_validate = 'Проверка неудалась';
  var str_uplerr_cancel = 'Файл отменен';
  var str_uplerr_stop = 'Закачка остановлена';
} else
{
  var str_error = 'Error';
  var str_info = 'Info';
  var str_ok = 'OK'
  var str_save = 'Save'
  var str_cancel = 'Cancel';
  var str_close = 'Close';
  var str_yes = 'Yes';
  var str_delete = 'Delete';
  var str_deleteprompt = 'Are you sure you want to delete this record?';
  var str_ivalidanswer = 'Invalid answer from server';
  var str_dialogwait = 'Please wait...';
  var str_upload = 'Uploading';
  var str_uplerr = 'Upload error';
  var str_uplerr_unknown = 'Unknown error';
  var str_uplerr_http = 'HTTP error';
  var str_uplerr_failed = 'Upload failed';
  var str_uplerr_io = 'IO error';
  var str_uplerr_security = 'Security error';
  var str_uplerr_limit = 'Upload limit exceeded';
  var str_uplerr_validate = 'Failed validation';
  var str_uplerr_cancel = 'File cancelled';
  var str_uplerr_stop = 'Upload stopped';
}

function dumpvar(varname)
{
  if (typeof(prettyPrint) != 'undefined')
    document.body.appendChild(prettyPrint(varname));
  else
    document.body.appendChild(varname);
}

function dumpobject(obj)
{
  if (typeof(prettyPrint) != 'undefined')
  {
    document.body.appendChild(prettyPrint(obj));
    return true;
  } else return false;
}

//startup

$(function()
{
  try
  {
    if ($('form').length != 0)
    {
      $('form :input').attr('disabled', false);
      $('form :input').focus(function() { $(this).removeClass('ui-state-error'); });
    }
    checkclickabletables();
    $('a.newwindow').bind('click', function(){ return !window.open(this.href); });
  } catch(err) {}
  if($.fn.ifixpng && $('.png').length != 0) $('.png').ifixpng();
});

function checkclickabletables()
{
  if ($('.clicktable').length != 0)
  {
    $.each($('.clicktable tr'), function(index, item)
    {
      if (typeof($(this).find('a').attr('href')) != 'undefined')
      {
        var link = $(this).find('a').attr('href');
        var cells = $(this).find('td:not(.noclick)');
        $(cells).addClass('clickablecell');
        $(cells).bind('click', function(){ document.location.href = link; });
        $(this).hover( 
            function() { $(this).toggleClass('ui-state-highlight'); },  
            function() { $(this).toggleClass('ui-state-highlight'); } 
        );
        $(this).find('td.noclick').css('cursor', 'default');
      } else
      {
        $($(this).find('td')).css('cursor', 'default');
        $($(this).find('th')).css('cursor', 'default');
      }
    });
  };
}

//messages

function showmessage(title, text, type, buttons)
{
  if ($('#dialogbox').length == 0) $('<div id="dialogbox"></div>').appendTo('body');
  var dialogbox = $('#dialogbox');
  dialogbox.empty();
  dialogbox.append('<div class="dlgimg_' + type + '">&nbsp;</div><div class="dlgtextbox">' + text + '</div>');
  dialogbox.attr('title', title);
  if($.fn.ifixpng) $('.dlgimg_' + type).ifixpng();
  var btnsjson = $.json.deserialize(buttons);
  var btnsobj = {};
  var firstval = '';
  $.each(btnsjson, function (key, val)
  {
    if (val == 'close')
      btnsobj[key] = function() { $(this).dialog('destroy'); };
    else
      btnsobj[key] = function()
      {
        $(this).dialog('destroy');
        eval(val);
      };
    if (firstval == '') firstval = val;
  });
  if (firstval == '' || firstval == 'close')
    dialogbox.dialog({ bgiframe: true, modal: true, resizable: false, width: 400, buttons: btnsobj,
      close: function(event, ui) { $(this).dialog('destroy'); } });
  else
    dialogbox.dialog({ bgiframe: true, modal: true, resizable: false, width: 400, buttons: btnsobj,
      close: function(event, ui) { $(this).dialog('destroy'); eval(firstval); } });
}

function openwindow(url, width, height, allowedcontrols)
{
  if (typeof(allowedcontrols) == 'undefined') allowedcontrols = '';
  var x = Math.round((screen.width - width) / 2);
  var y = Math.round((screen.height - height) / 2);
  var params = 'width=' + width + ',height=' + height + ',left=' + x + ',top=' + y
  if (allowedcontrols.indexOf('toolbar') == -1) params += ',toolbar=no'; else params += ',toolbar=yes';
  if (allowedcontrols.indexOf('location') == -1) params += ',location=no'; else params += ',location=yes';
  if (allowedcontrols.indexOf('directories') == -1) params += ',directories=no'; else params += ',directories=yes';
  if (allowedcontrols.indexOf('menubar') == -1) params += ',menubar=no'; else params += ',menubar=yes';
  if (allowedcontrols.indexOf('scrollbars') == -1) params += ',scrollbars=no'; else params += ',scrollbars=yes';
  if (allowedcontrols.indexOf('status') == -1) params += ',status=no'; else params += ',status=yes';
  window.open(url, '_blank', params);
}

//forms

function unblockform(withoutprogress, formname, dialogname)
{
  if (typeof(formname) == 'undefined') formname = 'formsend';
  $('#' + formname + ' :input').attr('disabled', false).removeClass('ui-state-disabled');
  $('#' + formname + ' .speedbutton').attr('disabled', false).removeClass('ui-state-disabled');
  $('#' + formname + ' a.ui-multiselect').attr('disabled', false).removeClass('ui-state-disabled');
  $('.ui-slider').slider('enable');
  if (typeof(dialogname) != 'undefined')
  {
    var dlgparent = $('#' + dialogname).parent();
    dlgparent.find('.ui-dialog-titlebar-close').show();
    dlgparent.find('.ui-dialog-buttonpane button').attr('disabled', false).removeClass('ui-state-disabled');
    if (typeof(gl_hideprogress) == 'undefined' || gl_hideprogress == false)
    {
      dlgparent.find('.ui-dialog-buttonpane').show('blind', 200);
      $('#' + dialogname + 'progress').hide('blind', {}, 200, function() { $('#' + dialogname + 'progress').remove(); });
    }
  }
  if ((typeof(gl_hideprogress) == 'undefined' || gl_hideprogress == false) &&
    (typeof(withoutprogress) == 'undefined' || withoutprogress == false))
  {
    $('#formbuttons').show('blind', 200);
    $('#formprogress:visible').hide('blind', 200);
  }
}

function blockform(withoutprogress, formname, dialogname)
{
  if (typeof(formname) == 'undefined') formname = 'formsend';
  $('#' + formname + ' :input').removeClass('ui-state-error').attr('disabled', true).addClass('ui-state-disabled');
  $('#' + formname + ' .speedbutton').attr('disabled', true).addClass('ui-state-disabled');
  $('#' + formname + ' a.ui-multiselect').attr('disabled', true).addClass('ui-state-disabled');
  $('.ui-slider').slider('disable');
  if (typeof(dialogname) != 'undefined')
  {
    var dlgparent = $('#' + dialogname).parent();
    dlgparent.find('.ui-dialog-titlebar-close').hide();
    dlgparent.find('.ui-dialog-buttonpane button').attr('disabled', true).addClass('ui-state-disabled');
    if (typeof(gl_hideprogress) == 'undefined' || gl_hideprogress == false)
    {
      dlgparent.find('.ui-dialog-buttonpane').hide('blind', 200);
      dlgparent.append('<div id="' + dialogname + 'progress" class="form ui-helper-hidden" style="text-align:center;">' +
        '<div style="text-align:center; font-size: 0.85em;">' + str_dialogwait + '</div>' +
        '<img alt="' + str_dialogwait + '" src="/images/preloader.gif"></div>');
      $('#' + dialogname + 'progress').show('blind', 200)
    }
  }
  if ((typeof(gl_hideprogress) == 'undefined' || gl_hideprogress == false) &&
    (typeof(withoutprogress) == 'undefined' || withoutprogress == false))
  {
    $('#formprogress').show('blind', 200);
    $('#formbuttons:visible').hide('blind', 200);
  }
}
 
function blockdelayed(formname, dialogname)
{
  setTimeout('blockform(true, \'' + formname + '\', \'' + dialogname + '\');', 100)
}

function processresponce(responseText, statusText)
{
  try
  {
    var res = $.json.deserialize(responseText);
  } catch(err)
  {
    if (jsdebugmode)
      showmessage(str_error, str_ivalidanswer + ': <div class="ui-state-error-text">' + err + '<div style="color:gray;">' +
        'Responce:' + responseText + '</div></div>', 'error', '{ "' + str_ok + '":"close" }');
    unblockform();
    return;
  }
  if (typeof(res.nounblock) == 'undefined') unblockform(typeof(res.noprogress) != 'undefined');
  if (res.result == 'ok')
  {
    if (typeof(res.message) != 'undefined')
      showmessage(str_info, res.message, 'info', '{ "' + str_ok + '":"eval(\'' + res.action + '\')" }');
    else
      eval(res.action);
  } else
  {
    if (res.errors == '') res.errors = '<div class="ui-state-error-text">' + str_ivalidanswer + '!</div>';
    if ((typeof(res.errorfields) != 'undefined') && res.errorfields != '')
      $.each(res.errorfields, function (key, val) { $('#' + val).addClass('ui-state-error'); });
    if (typeof(res.action) != 'undefined') eval(res.action);
    showmessage(str_error, res.errors, 'error', '{ "' + str_ok + '":"close" }');
  }
}

function processrequest(formData, jqForm, options)
{
  blockform();
  return true;
} 

function submitform(formname)
{
  if ((typeof(formname) == 'undefined') || formname == '') formname = 'formsend';
  $('#' + formname).ajaxSubmit({ success: processresponce, beforeSubmit: processrequest });
};

function go(newlocation)
{
  window.location.href = newlocation;
}

//tables

function deleterecord(recid, backendfile, tablename)
{
  blockform();
  $.post(backendfile + '_b.php', { action: 'delete', id: recid, dbobject: tablename }, function (responseText)
  {
    unblockform();
    try
    {
      var res = $.json.deserialize(responseText);
    } catch(err)
    {
      if (jsdebugmode)
        showmessage(str_error, str_ivalidanswer + ': <div class="ui-state-error-text">' + err + '<div style="color:gray;">' +
        'Responce:' + responseText + '</div></div>', 'error', '{ "' + str_ok + '":"close" }');
      return;
    }
    if (res.result == 'ok')
      eval(res.action);
    else
    {
      if (res.errors == '') res.errors = '<div class="ui-state-error-text">' + str_ivalidanswer + '!</div>';
      if ((typeof(res.errorfields) != 'undefined') && res.errorfields != '')
        $.each(res.errorfields, function (key, val)
          {
            $('#' + val).addClass('ui-state-error');
          });
      showmessage(str_error, res.errors, 'error', '{ "' + str_ok + '":"close" }');
    }
  });
}

function checkdeleterecord(recid, backendfile, tablename)
{
  if (typeof(tablename) == 'undefined') tablename = backendfile;
  showmessage(str_delete, str_deleteprompt, 'prompt',
    '{ "' + str_cancel + '":"close", "' + str_yes + '":"deleterecord(\'' + recid + '\', ' +
      '\'' + backendfile + '\', \'' + tablename + '\');" }');
}

//uploader

function getuploadprefix(event)
{
  var controlsprefix = $('#' + event.target.id).data('controlsprefix');
  if (typeof(controlsprefix) == 'undefined') controlsprefix = '';
  return controlsprefix;
}

function uploadstart(event, file)
{
  blockform(true);
  var prefix = getuploadprefix(event);
  if (typeof(window.preuploadtasks) == 'function') preuploadtasks(prefix);
  try
  {
    $.swfupload.getInstance('#' + prefix + 'swfupload-control').setButtonDisabled(true);
  } catch(err) {}
  $('#' + prefix + 'swfupload-fakebtn').hide();
  $('#' + prefix + 'swfupload-progressbar').progressbar('option', 'value', 0);
  $('#' + prefix + 'swfupload-progressbar').show();
  $('#' + prefix + 'swfupload-control').swfupload('startUpload');
};

function uploadsuccess(event, file, serverData)
{
  var prefix = getuploadprefix(event);
  $('#' + prefix + 'swfupload-progressbar').progressbar('option', 'value', 100);
  $('#' + prefix + 'swfupload-progressbar').hide();
  $('#' + prefix + 'swfupload-fakebtn').show();
  if (typeof(window.postuploadtasks) == 'function') postuploadtasks(prefix);
  unblockform(true);
  try
  {
    $.swfupload.getInstance('#' + prefix + 'swfupload-control').setButtonDisabled(false);
  } catch(err) {}
  try
  {
    var res = $.json.deserialize(serverData);
  } catch(err)
  {
    if (jsdebugmode)
      showmessage(str_error, str_ivalidanswer + ': <div class="ui-state-error-text">' + err + '<div style="color:gray;">' +
        'Responce:' + serverData + '</div></div>', 'error', '{ "' + str_ok + '":"close" }');
    return;
  }
  if (res.result == 'ok')
  {
    if (typeof(processuploadresult) != 'undefined') processuploadresult(res);
  } else
  {
    if (res.errors == '') res.errors = '<div class="ui-state-error-text">' + str_ivalidanswer + '!</div>';
    showmessage(str_error, res.errors, 'error', '{ "' + str_ok + '":"close" }');
  }
};

function uploaderror(event, file, errorCode, message)
{
  var prefix = getuploadprefix(event);
  var errortext = str_uplerr_unknown;
  switch (errorCode)
  {
    case SWFUpload.UPLOAD_ERROR.HTTP_ERROR: errortext = str_uplerr_http; break;
    case SWFUpload.UPLOAD_ERROR.UPLOAD_FAILED: errortext = str_uplerr_failed; break;
    case SWFUpload.UPLOAD_ERROR.IO_ERROR: errortext = str_uplerr_io; break;
    case SWFUpload.UPLOAD_ERROR.SECURITY_ERROR: errortext = str_uplerr_security; break;
    case SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED: errortext = str_uplerr_limit; break;
    case SWFUpload.UPLOAD_ERROR.FILE_VALIDATION_FAILED: errortext = str_uplerr_validate; break;
    case SWFUpload.UPLOAD_ERROR.FILE_CANCELLED: errortext = str_uplerr_cancel; break;
    case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED: errortext = str_uplerr_stop; break;
  }
  showmessage(str_upload, str_uplerr + ': <div class="ui-state-error-text">' + errortext + '</div>',
    'error', '{ "' + str_ok + '":"close" }');
  $('#' + prefix + 'swfupload-progressbar').hide();
  $('#' + prefix + 'swfupload-control').show();
  $('#' + prefix + 'swfupload-fakebtn').show();
  if (typeof(window.postuploadtasks) == 'function') postuploadtasks(prefix);
  unblockform(true);
  try
  {
    $.swfupload.getInstance('#' + prefix + 'swfupload-control').setButtonDisabled(false);
  } catch(err) {}
};

function uploadprogress(event, file, bytesLoaded)
{
  var prefix = getuploadprefix(event);
  if (typeof(file['size']) == 'undefined' || file['size'] == '' || file['size'] == '0') return;
  var percent = Math.round(bytesLoaded * 100 / file['size']);
  $('#' + prefix + 'swfupload-progressbar').progressbar('option', 'value', percent);
  $('#' + prefix + 'swfupload-progresstext').text(str_upload + ': ' + percent + '%');
  return true;
}

//misc

function strtrim(string)
{
  return string.replace(/(^\s+)|(\s+$)/g, '');
}

function checkmaximgsize(imgid, maxwidth, maxheight)
{
  var img = $('#' + imgid);
  if (img.length != 0)
  {
    img.removeAttr('width');
    img.removeAttr('height');
    var ix = img.width();
    var iy = img.height();
    var maxx = ix;
    var maxy = iy;
    if (maxwidth != 0) maxx = maxwidth;
    if (maxheight != 0) maxy = maxheight;
    if (ix > maxx || iy > maxy)
    {
      var xr = maxx / ix;
      var yr =  maxy / iy;
      if (xr < yr) var r = xr; else var r = yr;
      rx = Math.floor(ix * r);
      ry = Math.floor(iy * r);
      img.attr('width', rx);
      img.attr('height', ry);
    }
  }
}

function restorehttp(restorewww)
{
  if (restorewww) var newlocation = 'www.' + location.host; else var newlocation = location.host;
  var newlocation = 'http://' + newlocation;
  $.each($('a'), function(index, item) { if (item.protocol == 'https:') item.href = newlocation + item.pathname; });
  $.each($('button'), function(index, item)
  {
    if (typeof($(item).attr('onclick')) != 'undefined')
    {
      var body = $(item).attr('onclick') + '';
      if (body.indexOf('go("') != -1)
      {
        body = body.substr(body.indexOf('go("'), body.length);
        body = body.substr(0, body.indexOf(';') + 1);
        body = body.replace('go("', 'go("' + newlocation + '/');
        $(item).click(function() { eval(body); } );
      }
    }
  });
}

function humanizefilesize(size, digits)
{
  var i = 0;
  while (size > 1024)
  {
    size = size / 1024;
    i++;
  }
  switch (i)
  {
    case 0: res = size + ' b'; break;
    case 1: res = size.toFixed(digits) + ' KB'; break;
    case 2: res = size.toFixed(digits) + ' MB'; break;
    case 3: res = size.toFixed(digits) + ' GB'; break;
    case 4: res = size.toFixed(digits) + ' PB'; break;
    case 5: res = size.toFixed(digits) + ' PB'; break;
  }
  return res;
}

