function show_picture(script, src, alt, width, height) {

// alt must be escaped or empty because escape(str) doesn't work with russian symbols
  if (  (script.substring(0,7).toLowerCase()) != "http://"  &&  (script.substring(0,8).toLowerCase() != "https://" ) ){
    script = frontBaseHref + script;
  }

  var w_width = 40 + parseInt(width);
  var w_height = 100 + parseInt(height);

  if (w_height > window.screen.availHeight)
    w_height = window.screen.availHeight;
  if (w_width > window.screen.availWidth)
    w_width = window.screen.availWidth;

  src = encodeURIComponent(src);
  src = src.replace(/\//g, '%2F');
  window.open(script+"?src=" + src + "&alt=" + alt + "&width="+width + "&height="+height, "pic",
              "resizable=yes, status=yes, scrollbars=yes, width=" + w_width + ", height=" + w_height);
  //return false;
}

function show_details(script) {
  if (  (script.substring(0,7).toLowerCase()) != "http://"  &&  (script.substring(0,8).toLowerCase() != "https://" ) ){
    script = frontBaseHref + script;
  }

  var w_width = 200;
  var w_height = 250;

  if (w_height > window.screen.availHeight)
    w_height = window.screen.availHeight;
  if (w_width > window.screen.availWidth)
    w_width = window.screen.availWidth;

  window.open(script, "pic", "resizable=yes, status=yes, scrollbars=yes, width=" + w_width + ", height=" + w_height);
  //return false;
}


function none(){
  return false;
}

function isEmail(string) {
//    if (string.search(/^(\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+(;|,|$))+$/) != -1)
    if (string.search(/^(\w+[\w.-]*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+(;|,|$))+$/) != -1)
        return true;
    else
        return false;
}

//
// following functions will be deleted later
//

function collect_link(cform){
  var vlink = '';
  var first = 1;

  for(var i=0; i<cform.length; i++){
    el = cform.elements[i];
    if(el.type == 'hidden'){
      delim = (first)?'':'&';
      vlink = vlink + delim + el.name + '=' + encodeURIComponent(el.value);
      first = 0;
    }
  }
 return vlink;
}

function view_item(id){
  var sform = document.forms[_cms_document_form];
  var link = _cms_script_link;

  sform.elements['sort'].value = '';
  sform.elements['sdim'].value = '';

  return user_click('view', id);
}

function user_click(action, id){
  var sform = document.forms[_cms_document_form];
  var link = _cms_script_link;
  var anchor = '#anchor';

  if(action!='edit') anchor='';
  sform.elements['action'].value = action;
  sform.elements['id'].value = id;
  document.location = link + collect_link(sform) + anchor;

  return false;
}

function _go_page(sform, start, varname) {
  if(typeof(sform.elements[varname]) == 'object') {
    sform.elements[varname].value = start;
  } else {
    sform.elements['offset'].value = start;
  }
}

function go_page(start, varname){
  var sform = document.forms[_cms_document_form];
  var link = _cms_script_link;
  _go_page(sform, start, varname);
  sform.elements['action'].value = 'rsrtme';
  document.location = link + collect_link(sform);
  return false;
}

function go_pageSubmit(start, varname, action){
  var sform = document.forms[_cms_document_form];
  var link = _cms_script_link;
  _go_page(sform, start, varname);
  sform.elements['action'].value = action;
  sform.submit();
  return false;
}

function go_pagesize(size){
  var sform = document.forms[_cms_document_form];
  var link = _cms_script_link;

  sform.elements['action'].value = 'rsrtme';
  sform.elements['limit'].value = size;
  if(typeof(sform.elements['enc_limit']) == 'object') {
    sform.elements['enc_limit'].value = size;
  }
  document.location = link + collect_link(sform);

  return false;
}

function resort(ccol,cdim){
  var sform = document.forms[_cms_document_form];
  var link = _cms_script_link;

  sform.elements['action'].value = 'rsrtme';
  sform.elements['sort'].value = ccol;
  sform.elements['sdim'].value = cdim;

  if(typeof(CheckFilterForm) == "function")
    CheckFilterForm(sform, 0, 0);
  else
    document.location = link + collect_link(sform);

  return false;
}

function resortSubmit(ccol,cdim){
  return advResortSubmit(ccol,cdim,"sort","sdim");
}

function advResortSubmit(ccol,cdim,ccolname,cdimname){
  var sform = document.forms[_cms_document_form];
  //var link = _cms_script_link;
  //sform.elements['action'].value = 'rsrtme';
  sform.elements[ccolname].value = ccol;
  sform.elements[cdimname].value = cdim;
  sform.submit();
  return false;
}

function publish(id, act){
  var sform = document.forms[_cms_document_form];
  var link = _cms_script_link;

  sform.action.value = 'publish';
  sform.publish.value = act;
  sform.id.value = id;
  document.location = link + collect_link(sform);

  return false;
}

function _setCookie(sName, sValue, path, oDate, useEncodeURIComponent){
  var pathStr = "";

  if( typeof(path) !="undefined" && path != "") {
      pathStr = "; path="+path;
  }
  delCookie(sName);
  document.cookie = sName + "=" + (useEncodeURIComponent ? encodeURIComponent(sValue) : encodeURIComponent(sValue)) + pathStr + "; expires="+oDate.toGMTString();
}

function setCookie(sName, sValue, path, days, hours, useEncodeURIComponent){

  var oDate = new Date();
  if (typeof(days) == "undefined" && typeof(hours) == "undefined"){
    days = 30;
  }

  if (typeof(days) != "undefined") oDate.setDate(oDate.getDate() + days);
  if (typeof(hours) != "undefined") oDate.setHours(oDate.getHours() + hours);

  _setCookie(sName, sValue, path, oDate, useEncodeURIComponent);
}

function delCookie(name, path, domain) {
    if(getCookie(name) != null){
        document.cookie = name + "=" + (path ? ";path=" + path : "") + (domain ? ";domain=" + domain : "") + ";expires=Thu, 01-Jan-1970 00:00:01 GMT";
    }
}

amiCart = {
    prefix: '',
    useAJAX: typeof(use_background_cart) != 'undefined' && use_background_cart == '1',

    add: function(url, itemId, numPrice, wrongPriceMsg){
        var qty = '1', price = '';

        if(itemId != 0 && document.forms[this.prefix + 'qty_' + itemId + '_' + numPrice]){
            var form = document.forms[this.prefix + 'qty_' + itemId + '_' + numPrice];

            if(form.qty){
                qty = form.qty.value;
            }
            if(form.price){
                price = form.price.value;
                if(isNaN(price) || price <= 0){
                    if(wrongPriceMsg != 'none' && wrongPriceMsg != undefined){
                        alert(wrongPriceMsg);
                    }
                    return;
                }
            }
        }
        this.prefix = '';
        var resultUrl = frontBaseHref + url + '&qty=' + encodeURIComponent(qty) + (price != '' ? '&price=' + encodeURIComponent(price) : '');
        if(this.useAJAX && (url.indexOf('&eshop_special=') == -1 || url.indexOf('&url=') >= 0 /* is add to cart not checkout */)){
            resultUrl += '&eshop_cart_simple=1';
            amiAjax.getContent('GET', resultUrl, '', this.ajaxCallback);
        }else{
            document.location = resultUrl;
        }
    },

    addProp: function(url, itemId, propId, numPrice){
        var resultUrl = resultUrl = frontBaseHref + url + '&qty=';

        if(itemId != 0 && document.forms[this.prefix + 'qty_' + itemId + '_' + propId + '_' + numPrice] && document.forms[this.prefix + 'qty_' + itemId + '_' + propId + '_' + numPrice].qty){
             resultUrl += document.forms[this.prefix + 'qty_' + itemId + '_' + propId + '_' + numPrice].qty.value;
        }else{
            resultUrl += '1';
        }
        this.prefix = '';
        if(this.useAJAX && (url.indexOf('&eshop_special=') == -1 || url.indexOf('&url=') >= 0 /* is add to cart not checkout */)){
            resultUrl += '&eshop_cart_simple=1';
            amiAjax.getContent('GET', resultUrl, '', this.ajaxCallback);
        }else{
            document.location = resultUrl;
        }
    },

    ajaxCallback: function(status, content){
        if(status == 1 && (cartStatusPos = content.indexOf('cart updated')) >= 0){
            content = content.substr(cartStatusPos);
            amiSession.loadVariables();
            var aVarNames = content.split('|');
            amiCart.updateBlock(aVarNames[1], aVarNames[2]);

            var actionStatus = '';
            for(i = 3; i < aVarNames.length; i++){
                actionStatus += (i > 3 ? '|' : '') + aVarNames[i];
            }
            if(typeof(onAddedToCartMessage) == 'function'){
                onAddedToCartMessage(actionStatus);
            }else{
                alert(actionStatus);
            }
        }
    },

    updateBlock: function(itemCountCookieName, totalCookieName){
        var cartItemCount = amiSession.get(itemCountCookieName);

        if(document.getElementById('idEshopCartIsNotEmpty')){
            document.getElementById('idEshopCartIsNotEmpty').style.display = (cartItemCount == '' || cartItemCount == 0 ? 'none' : 'block');
        }
        if(document.getElementById('idEshopCartIsEmpty')){
            document.getElementById('idEshopCartIsEmpty').style.display = (cartItemCount == '' || cartItemCount == 0 ? 'block' : 'none');
        }
        if(cartItemCount != ''){
            if(document.getElementById(itemCountCookieName)){
                document.getElementById(itemCountCookieName).innerHTML = cartItemCount;
            }
            if(document.getElementById(totalCookieName)){
                document.getElementById(totalCookieName).innerHTML = amiSession.get(totalCookieName);
            }
            if(document.getElementById('eshopCartEmpty')){
                document.getElementById('eshopCartEmpty').style.display = (cartItemCount > 0 ? 'inline' : 'none');
            }
        }
        if(typeof(onUpdateCartBlock) == 'function'){
            // backward compatibility
            onUpdateCartBlock(cartItemCount, amiSession.get(totalCookieName));
        }else if(typeof(this.onUpdateBlock) == 'function'){
            this.onUpdateBlock(cartItemCount, amiSession.get(totalCookieName));
        }
    }
}

/* backward compatibility { */
// @todo replace AddToCart by amiCart.add and delete this function
function AddToCart(url, itemId, numPrice, wrongPriceMsg){
    return amiCart.add(url, itemId, numPrice, wrongPriceMsg);
}

// @todo replace AddToCartProp by amiCart.addProp and delete this function
function AddToCartProp(url, itemId, propId, numPrice){
    return amiCart.addProp(url, itemId, propId, numPrice);
}
/* } backward compatibility */

/* ADVERTISING BLOCK */

var advCurTmStamp = new Date();
document.usedAdvData = "";
var isInnerHtmlSupported = -1;
var shownAdvPlaces = '';
var shownAdvPlacesCnt = 0;
var advReferrer = ''
var advPlaceCnts = new Array();
if(document.referrer)
    advReferrer = document.referrer;
function processShownAdvPlaces(shownAdvPlaces){
    counter = 0;
    pos = -1;
    res = "";
    while((pos = shownAdvPlaces.indexOf(';', pos+1)) >= 0){
        if((pos1 = shownAdvPlaces.indexOf(';', pos+1)) < 0)
            pos1 = shownAdvPlaces.length;
        if(pos1-pos-1 > 0){
            curAdvPlace = shownAdvPlaces.substr(pos+1, pos1-pos-1);

            if((cpos = curAdvPlace.indexOf('_')) >= 0){
                counter = curAdvPlace.substr(cpos+1)-1;
                curAdvPlace = curAdvPlace.substr(0, cpos);
            }

            advPlaceCnts[curAdvPlace] = ++counter;
            res += ';'+curAdvPlace+"_"+counter;
        }
    }
    if(res.length > 0)
        res += ';';
    return res;
}
function showAdvPlace(idPlace, viewURL){
    if(isInnerHtmlSupported == -1){
        if(document.body.innerHTML)
            isInnerHtmlSupported = 1;
        else
            isInnerHtmlSupported = 0;
    }
    // After the document is loaded (new scheme)
    if(isInnerHtmlSupported == 1){
        shownAdvPlacesCnt ++;
        document.write('<span id="advp_'+idPlace+'_'+(advPlaceCnts[idPlace] ? advPlaceCnts[idPlace] : shownAdvPlacesCnt)+'"></span>');
        shownAdvPlaces += (shownAdvPlaces == '' ? ';' : '')+idPlace+';';
    // Old scheme - inline method
    }else{
        if (!document.usedAdvData)
            document.usedAdvData = '';
        rndseed = new String(Math.random()); rndseed = rndseed.substring(2,11);
        document.write ("<" + "script language='JavaScript' type='text/javascript' src='"+viewURL+"aproc.php?action=view&rs="+advCurTmStamp.getTime()+rndseed+"&place="+idPlace+"&used="+document.usedAdvData+"&curl="+encodeURIComponent(viewURL)+"&referer="+encodeURIComponent(advReferrer)+"'><"+"/script>");
    }
}

function showAdvBanner(id, content){
    if(document.usedAdvData)
        document.usedAdvData += ','+id+',';
    else
        document.usedAdvData  = ','+id+',';
    document.writeln(content);
}

function aLnkClick(lnkID){
    var aLink = frontBaseHref+"aproc.php?action=lclick&id="+lnkID+"&page_url="+encodeURIComponent(document.location.href);
    advClick(aLink);
}

function advClick(clickURL){
    rndseed = new String(Math.random()); rndseed = rndseed.substring(2,11);
    clickURL+="&rs="+advCurTmStamp.getTime()+rndseed;
    img = new Image();
    img.src = clickURL;
}

var advPlacesContent = new Array();
var fillAdvPlaceWatcher = new Array();
function fillAdvPlace(idPlace, idCnt, placeContent){
    if(advPlacesContent[idPlace+'_'+idCnt] == undefined)
        advPlacesContent[idPlace+'_'+idCnt] = placeContent;
    if(fillAdvPlaceWatcher[idPlace+'_'+idCnt] == undefined)
        fillAdvPlaceWatcher[idPlace+'_'+idCnt] = 0;
    if(document.getElementById && document.getElementById('advp_'+idPlace+'_'+idCnt) && document.getElementById('advp_'+idPlace+'_'+idCnt).innerHTML != undefined){
        document.getElementById('advp_'+idPlace+'_'+idCnt).innerHTML = advPlacesContent[idPlace+'_'+idCnt];
    }else{
        fillAdvPlaceWatcher ++;
        if(fillAdvPlaceWatcher < 1000)
            setTimeout("fillAdvPlace('"+idPlace+"', '"+idCnt+"');", 100);
    }
}

/* MODULE ADVERTISEMENT PART [not in use] */
/*
// String that contains module show data
var modAdvIdsArr = new Array();

// Set item view
function setView(modName, bodyType, id, idPlace){
    if(isNaN(idPlace))
        idPlace = 0;
    var isFound = 0;
    for(var i = 0; i < modAdvIdsArr.length; i++){
        if(modAdvIdsArr[i][0] == modName){
            modAdvIdsArr[i][1] += '|'+bodyType+id+','+idPlace;
            isFound = 1;
            break;
        }
    }
    if(!isFound)
        modAdvIdsArr[modAdvIdsArr.length] = new Array(modName, bodyType+id+','+idPlace);
}
// Process gathered adv IDs
function processViewAdvIds(){
    var retStr = '';
    for(var i = 0; i < modAdvIdsArr.length; i++)
        retStr += (retStr != '' ? ';' : '')+modAdvIdsArr[i][0]+'='+modAdvIdsArr[i][1];
    alert(retStr);
    return retStr;
}
*/

// Returns cookie value
function getPlainCookie(name){
    // cookies are separated by semicolons
    var aCookie = document.cookie.split("; ");
    var value = "";
    for (var i=0; i < aCookie.length; i++){
        // a name/value pair (a crumb) is separated by an equal sign
        var aCrumb = aCookie[i].split("=");
        if (name == aCrumb[0]){
            if(aCrumb[1] === undefined) {
                value = null;
            }else{
                value = aCrumb[1];
            }
            return value;
        }
    }

    // a cookie with the requested name does not exist
    return null;
}

function getCookie(name, useDecodeURIComponent){
    var val = getPlainCookie(name);

    if(val != null){
        if(useDecodeURIComponent){
            val = decodeURIComponent(val);
            val = val.replace(/\+/g, ' ');
        }else{
            val = decodeURIComponent(val);
        }
    }

    return val;
}

/*
function updateCookieExpireTime(name, minutes){
  var oDate = new Date();
  if (typeof(minutes) != "undefined") oDate.setMinutes(oDate.getMinutes() + minutes);

  var val = getCookie(name);
  if(val != null){
      _setCookie(name, val, "/", oDate);
  }
}
*/
// {{{ window.onLoad events queue implementation

var onLoadEvents = new Array ();
var previousOnLoadEvent;

function addOnLoadEvent(event) {
    onLoadEvents[onLoadEvents.length] = event;
}

function runOnLoadEventsQueue() {
    if (previousOnLoadEvent) {
        previousOnLoadEvent();
    }
    for (var i = 0 ; i < onLoadEvents.length; i++) {
        onLoadEvents[i]();
    }
}

function savePreviousOnLoadEvent() {
    previousOnLoadEvent = window.onload;
    window.onload = runOnLoadEventsQueue;
}

// }}}

function setCaptchaMD5Hash(sid)
{
    var cookie = getCookie('captcha_' + sid);
    if (cookie != null && cookie.length) {
        clearInterval(eval("intervalId_" + sid));
        eval("captcha_" + sid + " = cookie;");
        var path    = null;
        var domain  = null;
        if (location) {
            domain = location.host;
            path = frontBaseHref.replace(/^\w+\:\/\/[^\/]+/, '');
        }
        delCookie('captcha_' + sid, path, domain);
    }
}

if (!Array.prototype.indexOf) {
    Array.prototype.indexOf = function(val, fromIndex) {
        if (typeof(fromIndex) != 'number') {
            fromIndex = 0;
        }
        for (var index = fromIndex,len = this.length; index < len; index++) {
            if (this[index] == val) {
                return index;
            }
        }
        return -1;
    }
}

if (!Array.prototype.splice) {
    Array.prototype._splice = function(start) {
        if (start >= this.length) {
            return;
        }
        return this.slice(start);
    }
    Array.prototype._splice = function(start, deleteCount) {
        if (start >= this.length) {
            return;
        }
        return this.slice(0, start-1).concat(this.slice(start + deleteCount));
    }
}

function cloneArray(source)
{
    var destination = new Array();
    for (var i = 0 ; i < source.length ; i++) {
        if (!(typeof(source[i]) == 'undefined')) {
            destination[i] = source[i];
        }
    }
    return destination;
}

/* products comparison */

var
    mComparisonList = new Array (),
    mComparisonURL = '';

function compare(key)
{
    if (compareProducts.indexOf(key) >= 0) {
        alert(compareInComparisonAlready);
        return false;
    }
    if (mComparisonList.length && !confirm(compareAddSelected)) {
        return false;
    }
    if (compareProducts.length == compareMaxQuantity) {
        alert(compareMaxMessage);
        return false;
    }
    if (mComparisonList.indexOf(key) < 0) {
        mComparisonList.push(key);
    }

    // check for different datasets
    if (compareDisallowDifferentDatasets && compareProducts.length > 0) {
        var datasetId = compareDatasetId;
        var _mComparisonList = cloneArray(mComparisonList);
        for (var i = 0, qty = _mComparisonList.length ; i < qty ; i++) {
            var p = _mComparisonList[i].split('-'); // p[2] is containing datasetId now
            if (!compareDatasetId) {
                compareDatasetId = p[2];
            }
            if (compareDatasetId != p[2]) {
                if (!confirm(compareConfirmOtherDataset)) {
                    return false;
                }
                break;
            }
        }
    }
    return mSubmitAddToCompare();
}

function compareClear()
{
    if (confirm(compareConfirmListClearing)) {
        document.location = location.pathname + '?action=compareClear';
    }
    return false;
}

function mCompare(oCheckbox)
{
    var key = oCheckbox.value;
    if (oCheckbox.checked) {
        // exclude duplicates
        if (compareProducts.indexOf(key) >= 0) {
            alert(compareInComparisonAlready);
            oCheckbox.checked = false;
            return false;
        }
        // check for max quantity of products to compare
        if (compareProducts.length == compareMaxQuantity) {
            alert(compareMaxMessage);
            oCheckbox.checked = false;
            return false;
        }
        // check for different datasets
        if (compareDisallowDifferentDatasets) {
            var p = key.split('-');
            if ((compareProducts.length + mComparisonList.length) > 0 && p[2] != copmpareLastDatasetId && !confirm(compareConfirmOtherDataset)) {
                oCheckbox.checked = false;
                return false;
            }
            copmpareLastDatasetId = p[2];
            // uncheck checked products having other dataset
            var _mComparisonList = cloneArray(mComparisonList);
            for (var i = 0, qty = _mComparisonList.length ; i < qty ; i++) {
                var p = _mComparisonList[i].split('-');
                if (p[2] != copmpareLastDatasetId) {
                    var o = document.getElementById('cmp_' + _mComparisonList[i]);
                    o.checked = false;
                    mCompare(o);
                }
            }
            // count real number of products to comapere after adding
            var _compareProducts = cloneArray(compareProducts);
            for (var i = 0, qty = compareProducts.length ; i < qty ; i++) {
                var p = compareProducts[i].split('-');
                if (p[2] != copmpareLastDatasetId) {
                    var index = _compareProducts.indexOf(compareProducts[i]);
                    if (Array.prototype.splice) {
                        _compareProducts.splice(index, 1);
                    } else {
                        _compareProducts = mComparisonList._splice(index, 1);
                    }
                }
            }
            // check for max quantity of products to compare after manipulations
            if (_compareProducts.length + mComparisonList.length >= compareMaxQuantity) {
                alert(compareMaxMessage);
                oCheckbox.checked = false;
                return false;
            }
        }
        mComparisonList.push(key);
    } else {
        var index = mComparisonList.indexOf(key);
        if (index > -1) {
            if (Array.prototype.splice) {
                mComparisonList.splice(index, 1);
            } else {
                mComparisonList = mComparisonList._splice(index, 1);
            }
            copmpareLastDatasetId = compareDatasetId;
        }
    }
}

function mSubmitAddToCompare()
{
    var qty = mComparisonList.length;

    if (!qty) {
        alert(compareListIsEmpty);
        return false;
    }

    var _mComparisonList = cloneArray(mComparisonList);

    // check for added already products and exclude its from mComparisonList
    for (var i = 0 ; i < qty ; i++) {
        var index = compareProducts.indexOf(_mComparisonList[i]);
        if (index >= 0) {
            // exclude duplicate product
            if (Array.prototype.splice) {
                mComparisonList.splice(_mComparisonList.indexOf(mComparisonList[i]), 1);
            } else {
                mComparisonList = mComparisonList._splice(_mComparisonList.indexOf(mComparisonList[i]), 1);
            }
        }
    }

    document.location = location.pathname + '?action=compare&products=' + _mComparisonList.join(';');
    return false;
}

function mCompareSelected(url)
{
    if (mComparisonList.length < 2) {
        if (mComparisonList.length < 1 && compareProducts.length > 1) {
            window.open(frontBaseHref + url + '?p=' + compareProducts.join(';') + '&h=&v=all&lay_id=100');
            return false;
        }
        alert(compareListInsufficient);
        return false;
    }
    if (compareProducts.length && !confirm(compareConfirmPreviousClearing)) {
        return false;
    }
    window.open(frontBaseHref + url + '?p=' + mComparisonList.join(';') + '&h=&v=all&lay_id=100');
    return false;
}

/* /products comparison */

function getXPos(elem){
 x = 0;
 do { x += elem.offsetLeft; }
 while((elem = elem.offsetParent) != null);
 return x;
}

function getYPos(elem){
 y = 0;
 do { y += elem.offsetTop; }
 while((elem = elem.offsetParent) != null);
 return y;
}

var calendarBlock;
var calendarDateFieldName;
function getCalendar(in_dateField, lang, dateFormat, divIdPrefix){

    var elevPrefix = typeof(divIdPrefix) == 'undefined' ? '' : divIdPrefix;

    calendarTarget = in_dateField;
    calendarBlock = document.getElementById(elevPrefix + "calendar_block");
    if(calendarBlock && (calendarBlock.style.display!="block" || (in_dateField.form.name + in_dateField.name!=calendarDateFieldName))){
      calendarDateFieldName = in_dateField.form.name + in_dateField.name;
      cLeft = getXPos(calendarTarget)+calendarTarget.offsetWidth;
      cTop = getYPos(calendarTarget)+calendarTarget.offsetHeight;

      var dconfAddon = '';
      if(typeof(dateFormat) != 'undefined' && dateFormat != ''){
        dconfAddon = '&date_format='+dateFormat;
      }

      document.getElementById(elevPrefix + "calendar_block_frm").src = "calendar.php?v=2&lang="+lang+dconfAddon;
      calendarBlock.style.display="block";
      var correctLeft = cLeft + calendarBlock.offsetWidth - document.body.scrollLeft - document.body.clientWidth;
      var correctTop = cTop + calendarBlock.offsetHeight - document.body.scrollTop - document.body.clientHeight;
      calendarBlock.style.left = cLeft - ((correctLeft > 0)?correctLeft:0);
      calendarBlock.style.top = cTop - ((correctTop > 0)?correctTop:0);
      document.getElementById(elevPrefix + "calendar_block_frm").contentWindow.document.body.focus();
    }else if(calendarBlock){
      calendarBlock.style.display="none";
    }
}

function replaceDateTitle(objId){
    var objObj = document.getElementById(objId);
    if(objObj){
        var curDate = objObj.innerHTML;
        var rxToday = new RegExp(DATE_CONVERTION[2].replace(/\./g, "\\."));
        var rxYesterday = new RegExp(DATE_CONVERTION[3].replace(/\./g, "\\."));
        curDate = curDate.replace(rxToday, DATE_CONVERTION[0]);
        curDate = curDate.replace(rxYesterday, DATE_CONVERTION[1]);
        objObj.innerHTML = curDate;
    }
}

/*
Пример использования календаря
<div  id="calendar_block"  style="display:none;position:absolute;background-color:#f8f8f8;width:220px;height:345px;"><table border="0" cellpadding="0" cellspacing="0" width=100% height=100%><tr><td style="padding:0px;"><iframe id="calendar_block_frm" width=100% height=100% src="calendar.php" frameborder=0 scrolling=no></iframe></td></tr></table></div>

<form name=fltform>
дата:
<input type="text" name="testday" value="01.04.2007">
<a href="javascript:getCalendar(document.fltform.testday, 'ru');">
<img src="_img/calendar.gif" border=0></a>
</form>
*/

function saveURLHistory(){
	var uh_prev_mod = getCookie('uh_prev_mod');
	var uh_prev_url = getCookie('uh_prev_url');
	var uh_curr_mod = getCookie('uh_curr_mod');
	var uh_curr_url = getCookie('uh_curr_url');

	delCookie('uh_prev_mod', "/");
	delCookie('uh_prev_url', "/");
	delCookie('uh_curr_mod', "/");
	delCookie('uh_curr_url', "/");

	if(uh_curr_mod == null){
		setCookie('uh_prev_mod', active_module, "/");
		setCookie('uh_prev_url', active_module_link, "/");
		setCookie('uh_curr_mod', active_module, "/");
		setCookie('uh_curr_url', active_module_link, "/");
	}else if(uh_curr_mod != active_module){
		setCookie('uh_prev_mod', uh_curr_mod, "/");
		setCookie('uh_prev_url', uh_curr_url, "/");
		setCookie('uh_curr_mod', active_module, "/");
		setCookie('uh_curr_url', active_module_link, "/");
	}else{
		setCookie('uh_prev_mod', uh_prev_mod, "/");
		setCookie('uh_prev_url', uh_prev_url, "/");
		setCookie('uh_curr_mod', active_module, "/");
		setCookie('uh_curr_url', active_module_link, "/");
	}
}

saveURLHistory();

function amiFrontCommonClass(){
    this.serialize = function(oData){
        var result = '';
        if(typeof(oData) == "object"){
            if(oData instanceof Array){
                result += 'a';
                for(var i = 0; i < oData.length; i++){
                    var item = oData[i].toString();
                    result += item.length.toString() + '.' + item;
                }
            }else{
                result += 'o';
                for(var oKey in oData){
                    result += oKey.length.toString() + '.' + oKey + oData[oKey].length.toString() + '.' + oData[oKey];
                }
            }
        }
        return result;
    }

    this.unserialize = function(oString){
        var oData = null;
        if(oString.charAt(0) == 'a' || oString.charAt(0) == 'o'){
            var isArray = oString.charAt(0) == 'a';
            if(isArray){
                oData = new Array();
            }else{
                oData = new Object();
            }
            var dataLength = '';
            var isShouldBeKey = isArray ? false : true;
            var keyValue = '';
            for(var i = 1; i < oString.length; i++){
                if(oString.charAt(i).match(/\d/)){
                    dataLength += oString.charAt(i);
                }else if(oString.charAt(i) == '.'){
                    dataLength = parseInt(dataLength);
                    if(isShouldBeKey){
                        keyValue = oString.substr(i + 1, dataLength);
                        isShouldBeKey = false;
                    }else{
                        if(isArray){
                            oData[oData.length] = decodeURIComponent(oString.substr(i + 1, dataLength));
                        }else{
                            oData[keyValue] = decodeURIComponent(oString.substr(i + 1, dataLength));
                            isShouldBeKey = true;
                        }
                        keyValue = '';
                    }
                    i = i + dataLength;
                    dataLength = '';
                }
            }
        }
        return oData;
    }
}
var amiFrontCommon = new amiFrontCommonClass();

function amiSessionClass(cookieName, sessionCookieName, cookieDays, cookieHours){
	this.sessionCookieName = sessionCookieName;
    this.cookieName = cookieName;
    this.cookieDays = cookieDays;
    this.cookieHours = cookieHours;
    this.variables = new Object();

    this.init = function(){
        this.loadVariables();
    }

    this.setCookieName = function(value){
        this.cookieName = value;
    }

    this.setCookieLifetime = function(iDays, iHours){
        this.cookieDays = iDays;
        this.cookieHours = iHours;
    }

    this.set = function(name, value){
        this.variables[name] = value;
        this.storeVariables();
    }

    this.del = function(name){
        delete this.variables[name];
        this.storeVariables();
    }

    this.get = function(name){
        if(typeof(this.variables[name]) != 'undefined'){
            return this.variables[name];
        }
        return '';
    }

    this.storeVariables = function(){
        var sVariables = amiFrontCommon.serialize(this.variables);
        setCookie(this.cookieName, sVariables, '/', this.cookieDays, this.cookieHours, true);
    }

    this.loadVariables = function(){
        var sessionCookie = getCookie(this.sessionCookieName);
        if(sessionCookie != null){
            var sVariables = getCookie(this.cookieName, true);
            this.variables = new Object();
            if(sVariables != null){
                this.variables = amiFrontCommon.unserialize(sVariables);
                if(typeof(this.variables) != 'object'){
                    this.variables = new Object();
                }
            }
        }else{
            delCookie(this.cookieName);
        }
    }

    this.init();
}

var amiSession = new amiSessionClass('user_session', sessionCookieName, 30, 0);
//updateCookieExpireTime('user_session', sessionTimeout);

function amiGetUsername(source){
    var res;
    if(source == 'username'){
        res = amiSession.get('username_cookie');
    }else{
        res = amiSession.get('firstname_cookie') + ' ' + amiSession.get('lastname_cookie');
        res = res.replace(/^\s*/, '').replace(/\s*$/, '');
    }
    return res;
}

/* 
*    Request class with the functions 
*/
amiAjax = {

    requests: new Array(),
    variables: {},
    urlHash: '',

    // Init XML HTTP object
    _initObjectRequest: function(requestId){
        try{
            this.requests[requestId]['transport'] = new XMLHttpRequest();
        }catch(exception){
            this.requests[requestId]['transport'] = null;
        }
        if(this.requests[requestId]['transport'] == null){
            for(var i = 0; i < 2; i++){
                activeXName = i == 0 ? 'Msxml2.XMLHTTP' : 'Microsoft.XMLHTTP'; 
                try{
                    this.requests[requestId]['transport'] = new ActiveXObject(activeXName);
                }catch(exception){
                    this.requests[requestId]['transport'] = null;
                }
                if(this.requests[requestId]['transport'] != null){
                    break;
                }
            }
        }
        return (this.requests[requestId]['transport'] != null);
    },
    
    // Create query string from variables object
    _getRequestVariables: function(requestId){
        var variables = '';
        for(var key in this.requests[requestId]['variables']){
            variables += variables.length > 0 ? '&' : '';
            variables += encodeURIComponent(key) + '=' + encodeURIComponent(this.requests[requestId]['variables'][key]);
        }
        return variables;
    },
    
    // Create valid url for request
    _prepeareUrl: function(requestId){
        var url = this.requests[requestId]['url'];
        if(this.requests[requestId]['method'] == 'GET'){
            var variables = this._getRequestVariables(requestId);
            if(variables.length > 0){
                url = url + '?' + variables;
            }
            if(this.requests[requestId]['hash'].length > 0){
                url = url + '#' + encodeURIComponent(this.requests[requestId]['hash']);
            }
        }else if(this.requests[requestId]['method'] == 'POST'){
            // ?? Required to check this part of code
            var variables = this._getRequestVariables(requestId);
            this.requests[requestId]['transport'].send(variables);
        }
        return url;
    },
    
    // Process request for session parameters
    _request: function(requestId){
        if(this._initObjectRequest(requestId)){
            this.requests[requestId]['transport'].open(this.requests[requestId]['method'], this._prepeareUrl(requestId), true);
            if(this.requests[requestId]['method'] == 'GET'){
                this.requests[requestId]['transport'].setRequestHeader('If-Modified-Since', 'Sat, 1 Jan 2000 00:00:00 GMT');
                this.requests[requestId]['transport'].send(null);
            }else{
                this.requests[requestId]['transport'].setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
                this.requests[requestId]['transport'].send(this._getRequestVariables(requestId));
            }
            setTimeout('amiAjax._checkResponse('+requestId+')', 10);
        }else{
            alert('Problem with XML HTTP initialization');
        }
    },
    
    // Check the response from server and process action
    _checkResponse: function(requestId){
        if(this.requests[requestId]['transport'].readyState == 4){
            if(this.requests[requestId]['transport'].status == 200){
                this.requests[requestId]['status'] = 1;
                this.requests[requestId]['content'] = this.requests[requestId]['transport'].responseText;
            }else{
                this.requests[requestId]['status'] = 2;
            }
            if(this.requests[requestId]['callback'] != null){
                this.requests[requestId]['callback'](this.requests[requestId]['status'], this.requests[requestId]['content']);
            }
            this.requests[requestId]['transport'] = null;     
            this.requests[requestId] = null;
        }else{
            setTimeout('amiAjax._checkResponse('+requestId+')', 10);
        }
    },
    
    // Remove all query variables
    resetRequestVariables: function(){
        this.variables = {};
    },
    
    // Add query variable
    addVariable: function(key, value){
        this.variables[decodeURIComponent(key)] = decodeURIComponent(value);
    },
    
    // Set url hash code
    setUrlHash: function(value){
        this.urlHash = decodeURIComponent(value);
    },
    
    // Parse query string and create variables object
    addVariablesFromString: function(variables){
        this.resetRequestVariables();
        
        variables = variables.replace(/^[\s?]*(.*?)[\s]*$/g, '$1');
        
        var aHash = variables.split('#');
        if(typeof(aHash[1]) != 'undefined'){
            variables = aHash[0];
            this.setUrlHash(aHash[1]);
        }else{
            this.setUrlHash('');
        }
        
        var aPairs = variables.split('&');
        for(var i = 0; i < aPairs.length; i++){
            aPair = aPairs[i].split('=');
            if(aPair[0] != ''){
                this.addVariable(aPair[0], aPair[1]);
            }                
        }
    },
    
    getContent: function(method, url, variables, callbackFunction){
        var requestId = this.requests.length;
        this.requests[requestId] = {};
        this.requests[requestId]['status'] = 0;
        this.requests[requestId]['callback'] = typeof(callbackFunction) == 'function' ? callbackFunction : null;
        this.requests[requestId]['transport'] = null;
        this.requests[requestId]['method'] = method.toUpperCase();
        this.requests[requestId]['url'] = url;
        if(typeof(variables) != 'undefined'){
            this.addVariablesFromString(variables);
        }
        this.requests[requestId]['variables'] = this.variables;
        this.requests[requestId]['hash'] = this.urlHash;
        this.requests[requestId]['content'] = '';
        this._request(requestId);
    }
}
