
/**
 * posledni element, kterym se prihodilo mysi
 */
var shopLastAddBasketClick = null;

/**
 * zda bylo spusteno ajax nacteni v parametrickem hledani
 * - nastavuje se na name elementu, na kterem probehl ajaxovy load
 * - slouzi k tomu, aby se pri onmousedown pozadalo pouze jednou, dokud se neklikne na jiny select
 */
var ajax_search_flag = false;
var ajax_search_active = false;
var ajax_search_option_backup = false;

/**
 *
 */
var shopDodaciAdresaIndex = -1;

/**
 * nalezne pozici elementu na strance
 * - vraci pole
 */
function findElementPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}


/**
 * funkce shopu
 */

/**
 * zpozdene presunuti kosiku pri scrollovani
 */
function showFBtimeout() {
  //setTimeout(showFloatBasket, 10);
  showFloatBasket(true);
}

/**
 * zobrazi pomoci js a css kosik
 */
function showBasketCss ()
{
    var w = document.getElementById('floatbasketframe');
    if (w) {
        w.style.display='block';
        w.style.zIndex='100';
    }
}

/**
 * zobrazeni kosiku - vertikalni verze v pravem sloupci
 * @param show zda zobrazit kosik pomoci JS - lze totiz udelat az v kodu kosiku
 */
function showFloatBasket(noclear, show) {
  var w = document.getElementById('floatbasketframe');
  if (show == null) {
    show = true;
  }

  try {
      // smazeme puvodni obsah
      if (!noclear && self.floatbasketframe) {
        w.style.display='none';
        self.floatbasketframe.document.body.innerHTML = '';
      }
  } catch(e) {
  }

  // posuneme po Y souradnici (na pozici zascrolovaneho okna)
  var y = (window.pageYOffset) ? (window.pageYOffset) : (document.documentElement && document.documentElement.scrollTop) ? document.documentElement.scrollTop : document.body.scrollTop;
  w.style.top = (y+200)+'px';
  if (show) {
    showBasketCss();
  }
  window.onscroll = showFBtimeout;
}

function setAddBasket(obj) {
    shopLastAddBasketClick = obj;
}

/**
 * zobrazeni kosiku na pozici prihozeni - pozice mysi zrusena protoze to zatezuje CPU a navic problikava CSS popup menu
 */
function showFloatBasketAtMouse(move_x, move_y, over_x, over_y, move_over_x, move_over_y) {
  var w = document.getElementById('floatbasketframe');

  // smazeme obsah
  if (self.floatbasketframe) {
    w.style.display='none';
    self.floatbasketframe.document.body.innerHTML = '';
  }

  // zjistime pozici posledniho prihozeni
  if (shopLastAddBasketClick) {
    var pos = findElementPos(shopLastAddBasketClick);
    var xMousePos = pos[0];
    var yMousePos = pos[1];
  } else {
    showFloatBasket();
    return;
  }

  // zjistime maximalni rozmery
  var offx = (window.pageXOffset) ? (window.pageXOffset) : (document.documentElement && document.documentElement.scrollLeft) ? document.documentElement.scrollLeft : document.body.scrollLeft;
  var offy = (window.pageYOffset) ? (window.pageYOffset) : (document.documentElement && document.documentElement.scrollTop) ? document.documentElement.scrollTop : document.body.scrollTop;
  if (document.layers) {
     xMousePosMax = window.innerWidth+window.pageXOffset;
     yMousePosMax = window.innerHeight+window.pageYOffset;
  } else if (document.documentElement) {
     xMousePosMax = document.documentElement.clientWidth+offx;
     yMousePosMax = document.documentElement.clientHeight+offy;
  } else if (document.all) {
     xMousePosMax = document.body.clientWidth+offx;
     yMousePosMax = document.body.clientHeight+offy;
  } else if (document.getElementById) {
     xMousePosMax = window.innerWidth+offx;
     yMousePosMax = window.innerHeight+offy;
  }

  // posuneme kosik na pozici
  if (move_x == null) {
    move_x = 30;
  }
  if (move_y == null) {
    move_y = -60;
  }
  if (over_x == null) {
    over_x = 200;
  }
  if (over_y == null) {
    over_y = 300;
  }
  if (move_over_x == null) {
    move_over_x = -230;
  }
  if (move_over_y == null) {
    move_over_y = -200;
  }
  w.style.marginLeft = '0px';
  w.style.paddingLeft = '0px';
  if ((xMousePosMax - xMousePos) < over_x) {
    w.style.left = (xMousePos+move_over_x)+'px';
  } else {
    w.style.left = (xMousePos+move_x)+'px';
  }
  w.style.marginTop = '0px';
  w.style.paddingTop = '0px';
  if ((yMousePosMax - yMousePos) < over_y) {
    w.style.top = (yMousePos+move_over_y)+'px';
  } else {
    w.style.top = (yMousePos+move_y)+'px';
  }
  showBasketCss();
}

/**
 * skryti kosiku hned po vypsani do kodu
 */
function hideBasket() {
  document.getElementById('floatbasketframe').style.display='none';
  window.onscroll = null;
}

/**
 * kontrola zadavaneho poctu pri prihozeni
 */
function pocet_control(event, obj, shopid, show_basket) {
  var e = event ? event : window.event;
  var code = e.keyCode ? e.keyCode : e.charCode; // IE x NS
  
  if(typeof(show_basket) == 'undefined') {
    show_basket = true;
  }
  
  if(!e)
    return true;
  // pocet nakopirujeme do globalnich inputu, pokud existuji (kvuli prihazovani v grupovanych polozkach, kde je jenom jeden form)
  if(obj != null && shopid!=null && obj.form.shopid && obj.form.pocet && code == 13) {
    obj.form.shopid.value = shopid;
    obj.form.pocet.value  = obj.value;
    e.returnValue=false;
    obj.form.onsubmit();
    obj.form.submit();
    return false;
  }
    return true;
}

/**
 * prihozeni v grupe zbozi se spolecnym form
 */
function objednat_control(obj) {
  // smazat ulozene hodnoty
  obj.form.shopid.value = '__sys_empty';
  obj.form.pocet.value  = '__sys_empty';
}

/**
 * funkce pro zamezeni nasobneho odesilani formulare
 * - vklada se do form jako onsubmit="return prevent_multiple_submit()"
 * - pozor: prepisuje window.onunload
 * - pozor: je treba mit nastavenou globalni promennou prevent_multiple_submit_status
 */
var prevent_multiple_submit_status = false;

function prevent_multiple_submit() {
  if(!prevent_multiple_submit_status) {
    prevent_multiple_submit_status = true;
    window.onunload = function enable() {
                        prevent_multiple_submit_status = false;
                      };
  } else {
    // alert('Prosím čekejte.');
    return false;
  }
}

/**
 * pro volani v masce - ziskani hodnoty z klienta (z cookies)
 */
function shop_get_client (name, default_text) {
    
    var v = read_cookie('shop_client_item_'+name);
    if (v == '') {
        if (default_text == null) {
            default_text = '';
        }
        v = default_text;
    }
    return v;
}

/**
 * vrati hodnotu cookie
 */
function read_cookie(name)
{
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) {
            return decodeURIComponent(c.substring(nameEQ.length,c.length));
        }
	}
	return '';
}

/**
 * vola se v onsubmit formulare s comodit - pri prihozeni - kontrola atributu a zobrazeni plovouciho kosiku
 */
function shop_onsubmit_comodit(obj, typ, move_x, move_y, over_x, over_y, move_over_x, move_over_y) {
    var r = false;
    if (shop_control_attribs(obj)) {
        r = shop_show_basket_float_by_type(obj, typ, move_x, move_y, over_x, over_y, move_over_x, move_over_y);
    }
    return r;
}


/**
 * vola se v onsubmit formulare s comodit - pri prihozeni - kontrola atributu a zobrazeni plovouciho kosiku
 */
function shop_show_basket_float_by_type(obj, typ, move_x, move_y, over_x, over_y, move_over_x, move_over_y)
{
    // horizontalne pevne - pohyb jen vertikalne
    if (typ == 'fixed_horiz_hidden') {
        showFloatBasket(null, false);
    } else if (typ == 'fixed_horiz') {
        showFloatBasket();
    } else {
        // default - na pozici submitu
        showFloatBasketAtMouse(move_x, move_y, over_x, over_y, move_over_x, move_over_y);
    }
    return true;        
}

/**
 * kontrola shopping atributu pri prihozeni
 */
function shop_control_attribs(obj) {
    var r = true;
    var al = '';
    var ff = null;

    for (e in obj) {
        if (e && obj[e] && typeof(obj[e]) == 'object') {
            if (   obj[e].nodeName == 'SELECT'
                && obj[e].name
                && obj[e].name.substr(0, 6) == 'attrib'
                && obj[e].selectedIndex == 0
                && (!obj[e].options[obj[e].selectedIndex].value || obj[e].options[obj[e].selectedIndex].value == '')
           ) {
                al += obj[e].options[obj[e].selectedIndex].text + "\n";
                if (!ff) {
                    ff = obj[e];
                }
                r   = false;
            }
        }
    }
    if (!r) {
        alert(al);
        ff.focus();
    }
    return r;
}

/**
 * url encode pro sestaveni url s parametry pri ajax hledani
 */
function shop_param_search_php_urlencode (str) {
    str = encodeURI(str);
    return str.replace(/[*+\/@]|%20/g,
        function (s) {
            switch (s) {
                case "*": s = "%2A"; break;
                case "+": s = "%2B"; break;
                case "/": s = "%2F"; break;
                case "@": s = "%40"; break;
                case "%20": s = "+"; break;
            }
            return s;
        }
    );
}

/**
 * ajaxova fce pro ziskani hodnot do parametrickeho hledani pri kliknuti na selecbox
 */
function shop_param_search_get_items (sys_action, elem, menuid, offer_id, offer_category, onbackground, please_wait_str) {
    //alert('loading '+elem.name);

    // zkrontrolujeme, zda uz nebyl nacteny
    if (ajax_search_active || (ajax_search_flag && ajax_search_flag == elem.name)) {
        return true;
    }
    ajax_search_flag = elem.name;
    ajax_search_active = elem;

    // projdeme cely formular a posleme parametry v URL - az pri zpracovani se pak zjisti, ktere hodnoty se budou zpracovavat
    var f = elem.form;
    var cv = '';
    var c = 0;
    for (var i=0; i<f.elements.length; i++) {
        // zatim jenom pro selecty a checkboxy // @todo (3) mohlo by se rozsirit o radio, inputy atd.
        if (f.elements[i].nodeName == 'SELECT') {
            if (c>0) {
                cv += '&';
            }
            cv +=  f.elements[i].name + '=' + shop_param_search_php_urlencode(f.elements[i][f.elements[i].selectedIndex].value);
            c++;
        } else if (f.elements[i].nodeName == 'INPUT' && f.elements[i].type == 'checkbox' && f.elements[i].checked)  {
            if (c>0) {
                cv += '&';
            }
            cv +=  f.elements[i].name + '=' + shop_param_search_php_urlencode(f.elements[i].value);
            c++;
        } 
    }

    url = sys_action+'&forid='+elem.name+'&menuid='+menuid+'&offer_id='+offer_id+'&offer_category='+offer_category;

    // zablokujeme a zapnemem ikonku s loadingem
    elem.disabled = true;

    // nahravaci text do prvni polozky
    ajax_search_option_backup = elem.options[elem.selectedIndex].innerHTML;
    elem.options[elem.selectedIndex].innerHTML = please_wait_str;

    // loading ikona
    var loading_span = document.getElementById('ps_loading_'+elem.name);
    if (loading_span) {
        loading_span.style.backgroundImage = "url('picture/mask/loading.gif')";
    }

    // ajax
    if (onbackground) {
        var params = {
            'method':'POST',
            'async':true,
            'postData':cv,
            'callbackFunction':shop_param_search_get_items_cb_finish,
            'returnType':'xml',
            'responseTag':'data',
            'maxErrors':2
        }
        AJAXrequest2(url, params);
    } else {
        var params = {
            'method':'POST',
            'async':false,
            'postData':cv,
            'returnType':'xml',
            'responseTag':'data',
            'maxErrors':2
        }
        var o = AJAXrequest2('POST', params);
        shop_param_search_get_items_cb_finish(o);
    }
}

/**
 * vola se po skonceni ajax pozadavku - doplni data do stranky
 */
function shop_param_search_get_items_cb_finish (response_xml) {

    if (ajax_search_active && response_xml) {

        var ro = response_xml.getElementsByTagName('item');
        if (ro && ro.length>0) {            
            
            // prvni polozka text
            ajax_search_active.options[ajax_search_active.selectedIndex].innerHTML = ajax_search_option_backup;
            
            for(i=0; i<ajax_search_active.options.length; i++) {
            
                var found_opt = false;
                for(j=0; j<ro.length; j++)
                {
                    if (ro[j].getAttribute('value') == ajax_search_active.options[i].value) {
                        found_opt = true;
                        break;
                    }
                }
                if (found_opt) {
                    ajax_search_active.options[i].className = '';
                } else {
                    ajax_search_active.options[i].className = 'disabled';
                }                    
            }
        }

        // odblokujeme a zrusime loading
        var loading_span = document.getElementById('ps_loading_'+ajax_search_active.name);
        if (loading_span) {
            loading_span.style.backgroundImage = '';
        }
        ajax_search_active.disabled = false;
        ajax_search_active.focus();

        ajax_search_active = false;
    }
}

/**
* onlick na input radio dopravnem - dodaci mista
*/
function dopravne_balne_onclick_dodaci_mista (f)
{
    if (!f['form_fakturacni_dodaci_misto']) {
        return;
    }
    
    // zapamatujeme si dodaci adresu
    if (f.form_dodaci_sys_select) {
        shopDodaciAdresaIndex = f.form_dodaci_sys_select.options[f.form_dodaci_sys_select.selectedIndex].value;
        form_change_item_in_dodaci(f, -1);
    }
    
    f.form_fakturacni_dodaci_misto.disabled=false;
    document.getElementById('shop-registration-adress-delivering-disabled2').className='dodaci-disabled';
    if (f.form_dodaci_sys_select) {
        f.form_dodaci_sys_select.disabled=true;
    }
    f.form_dodaci_sys_sent.value=2;
}

/**
* onlick na input radio dopravnem - mimo dodaci mista
*/
function dopravne_balne_onclick_dodaci_mista_deselect (f)
{
    if (!f['form_fakturacni_dodaci_misto']) {
        return;
    }

    // obnovime puvodni dodaci adresu
    if (shopDodaciAdresaIndex != -1) {
        form_change_item_in_dodaci(f, shopDodaciAdresaIndex);
    }
    
    // zakazeme mista dodani a povolime dodaci adresy
    f.form_fakturacni_dodaci_misto.disabled=true;
    document.getElementById("shop-registration-adress-delivering-disabled2").className='';
    if (f.form_dodaci_sys_select) {
        f.form_dodaci_sys_select.disabled=false;
    }
    f.form_dodaci_sys_sent.value=1;
    shopDodaciAdresaIndex = -1;
}

