function errorHandler(msg, url, line) {
	if (url.length > 0) {
		$('body').append('<img src="/jserrorhandler.php?msg='+encodeURIComponent(msg)+
			'&amp;url='+encodeURIComponent(url)+
			'&amp;line='+encodeURIComponent(line)+'" alt="" width="1px" height="1px" />');
	}
	return false;
}
window.onerror = errorHandler;

function showoporderdetail(id, ordid) {
  if (window.openedopdetails) {
	  $('#opdet'+window.openedopdetails).empty();
  }
  $('#opdet'+id).html('<img src="/img/loading.gif" alt="loading..." />');
  makeRequest("/get", "opdet"+id, "func=get_overprint_order_details&ord="+ordid+"&id="+id);
  openedopdetails = id;
}

function get_cookie(Name) {
  var search = Name + "=";
  var returnvalue = "";
  if (document.cookie.length > 0) {
    var offset = document.cookie.indexOf(search);
    // if cookie exists
    if (offset != -1) { 
      offset += search.length;
      // set index of beginning of value
      var end = document.cookie.indexOf(";", offset);
      // set index of end of cookie value
      if (end == -1) end = document.cookie.length;
      returnvalue=unescape(document.cookie.substring(offset, end));
    }
  }
  return returnvalue;
}

function updateshopcartwart() {
	$('#shopcartval').val(window.shopcartwart[$('#shopcartcurr').val()]);
	return true;
}

function parsecart(data) {
	if (!data)
		return false;
	if (!data.status)
		return false;

	var sc = document.getElementById("shopcart");
	var options = sc.getElementsByTagName("option");
	for (var i = options.length-1; i>=0; i--)
	      sc.removeChild(options[i]);
	
	for (i=0; i<data.cart.length; ++i) {
		var item = data.cart[i];
		sc.add(new Option("["+item['qty']+"szt] "+item['name']+" ("+item['size']+")", item['cid']), undefined);
	}
	window.shopcartwart = data.wart;
	updateshopcartwart();
	return true;
}

function getFunctionName(fn) {
  var m = fn.toString().match(/^\s*function\s+([^\s\(]+)/);
  return m ? m[1] : fn;
}

function hidemsg() {
	if ($('#msg'))
		$('#msg').dialog('close');
}

function refreshToken(id) {
	var d= new Date();
	$('#'+id).attr('src', '/token?t='+d.getTime().toString());
}

function showmsg(tekst,buttons) {
	hidemsg();
	tekst = unescape(tekst);
	var dlg = $('#msg').html(tekst);
	
	dlg.dialog({ autoOpen: false });
	dlg.dialog( 'option' , 'bgiframe' , true );	
	dlg.dialog( 'option' , 'modal' , true );
	if (buttons) {
		dlg.dialog( 'option' , 'buttons' , buttons );
	} else { 
		dlg.dialog( 'option' , 'buttons' , { Ok: function() { $(this).dialog('close'); } });
	}
	dlg.bind('dialogopen', function() { $('#msg img').load(function(){
		var w = $('#msg img').attr('width');
		if (w) $('#msg').dialog('option', 'width', w+30).dialog('option', 'position', 'center');
	}); });
	dlg.dialog('open');
}

function cart_remove() {
	var id = document.getElementById("shopcart").value;

	if (id > 0) {
		$.post('/get', { func: 'cart_del', delid: id }, parsecart, 'json');
	} else {
		showmsg(_('Wybierz produkt, który chcesz usunąć.'));
	}	
}

function cart_clear() {
        if (window.confirm(_('Czy na pewno chcesz opróżnić koszyk?')) == true) {
        	$.post('/get', { func: 'cart_clear' }, parsecart, 'json');
        }
}

function showprod(id) {
	window.location = "/sklep/_goproduct/"+id+"/";
}

function dodaj_do_zakladek() {
  var title = 'xt24.eu';
  var url = "http://xt24.eu/";
  if (window.sidebar) {
      window.sidebar.addPanel(title, url,"");
  } else if( window.external ) { // IE Favorite
      window.external.AddFavorite( url, title); }
  else if(window.opera && window.print) {
    var elem = document.createElement('a');
    elem.setAttribute('rel','sidebar');
    elem.setAttribute('href',url);
    elem.setAttribute('title',title);
    elem.click();
  }                
}

function changeproductoption(id, opt) {
	$.post('/get', { func: 'getproductinfo', id: id, opt: opt }, function(data) {
		$('#product_name').html(data.name); 
		$('#product_netto').html(data.netto);
		$('#product_price').html(data.price);
		$('#product_option').val(data.option);
		
		var t = '<tr><th colspan="' + data.sizes.length + '">'+_('Dostępne rozmiary')+'</th></tr>';
		t += '<tr id="sizetable" class="tablight" style="text-align:center;"><td>';
		t += data.sizes.join('</td><td style="width:'+Math.floor(100/data.sizes.length)+'%;">');
		t += '</td></tr>';
		$('#sizetable').html(t);
		
		t = "<table><tr><td>";
		t += data.sizes.join('</td><td style="width:'+Math.floor(100/data.sizes.length)+'%;">');
		t += "</td></tr><tr>";
		for (var i=0; i<data.sizes.length; i++) {
			t += "<td><input type=\"text\" name=\"qty["+data.sizes[i]+"]\" value=\"0\" size=\"2\" onchange=\"updateqtytotal(this.form);\" /></td>";
		}
		t += '<td><input style="background-color: #FFFFFF;" readonly="readonly" disabled="disabled" id="qtytotal" type="text" value="0" size="2" /></td>';
		t += "</tr></table>";
		  
		$('#qtyholder').html(t);
		
		t = "";
		for (var i=0; i<data.photos.length; i++) {
			var photo = data.photos[i];
			t += '<a class="ceebox" title="'+_("Zdjęcie produkt")+'" href="'+photo.org+'" >';
			t += '<img src="'+photo.mini+'" alt="" />';
			t += '</a>';
		}
		$('#product_photos').empty();
		$('#product_photos').html(t); 
		$('#product_photos a').ceebox();
		
	}, 'json');
//  makeRequest('/get',changeproductoption_callback,'func=getproductinfo&id='+id+'&opt='+opt);
}

function changeproductoption_callback(ret) {


}

function changeprivateproductoption(id, opt) {
	$.post('/get', { func: 'getprivateproductinfo', id: id, opt: opt }, function(data) {
		if (data.status == 0)
			return false;
		$('#product_name').html(data.name);
		$('#product_price').html(data.price);
		$('#product_option').val(data.option);
		
		var t = '<tr><th colspan="' + data.sizes.length + '">'+_('Dostępne rozmiary')+'</th></tr>';
		t += '<tr id="sizetable" class="tablight" style="text-align:center;"><td>';
		t += data.sizes.join('</td><td style="width:'+Math.floor(100/data.sizes.length)+'%;">');
		t += '</td></tr>';
		$('#sizetable').html(t);
		
		t = "";
		for (var i=0; i<data.ws.length; i++) {
			ws = data.ws[i];
			t += '<a class="ceebox" title="'+_("Wizualizacja nadruku")+'" href="/visualizations/'+data.vid+'_'+ws+'_'+data.option+'.png" >';
			t += '<img src="/visualizations/'+data.vid+'_'+ws+'_'+data.option+'_mini.png" alt="" />';
			t += '</a>';
		}
		$('#product_photos').empty();
		$('#product_photos').html(t); 
		$('#product_photos a').ceebox();
	}, 'json');
}

function updateqtytotal(form) {
  
  var q = form.elements;
  var s = 0;
  for (i=0; i < q.length; i++) {
    if (q[i].name.indexOf("qty") == 0) {
      var a = parseInt(q[i].value);
      if (isNaN(a)) continue;
      s += a;
    }
  }
  document.getElementById("qtytotal").value = s;
  return 1;
}

function dumper(co) {
  var ret = "";
  for(var item in co) {
    ret += item+" => "+co[item]+"\n";
  }
  return ret;
}

function setselect(select, value) {
  var sel = 0;
  for (var i=0; i<select.options.length; ++i)
    if (select[i].value == value) {
      sel = i;
      break;
    }
  select.selectedIndex = sel;
}

function showcurr(value, curr) {
  var usd = window.usd;
  var eur = window.eur;
  var pln = 1;
  if (curr == "USD") { 
    pln /= usd;
    eur /= usd;
    usd = 1;
  }
  if (curr == "EUR") {
    pln /= eur;
    usd /= eur;
    eur = 1;
  }
  pln = value/pln; pln = pln.toFixed(2);
  usd = value/usd; usd = usd.toFixed(2);
  eur = value/eur; eur = eur.toFixed(2);
  return pln+"&nbsp;PLN<br />"+usd+"&nbsp;USD<br />"+eur+"&nbsp;EUR";

}

function setUserCurrency(curr) {
	$.post('/get', {func: 'setUserCurrency', c: curr});
}

function nop(param) {
	return false;
}

function showpayoutdetail(v) {
	$('.payoutdetail_bank').hide();
	$('.payoutdetail_paypal').hide();
	$('.payoutdetail_'+v).show();
}

function rawcommintoprice(p,c) {
	var wycena = parseFloat(p.replace(/,/, "."));
	var prowizja = parseFloat(c.replace(/,/, "."));
	if (isNaN(wycena) || isNaN(prowizja) || (wycena <= 0) || (prowizja < 0)) {
		return _('bład');
	}
	wycena = wycena.toFixed(2);
	prowizja = prowizja.toFixed(2);
	var dochod = parseFloat(prowizja)*1.23456789 - parseFloat(prowizja);
	dochod = dochod.toFixed(2);
	var vat = (parseFloat(prowizja)+parseFloat(dochod))*0.22;
	vat = vat.toFixed(2);
	var suma = parseFloat(wycena)+parseFloat(prowizja)+parseFloat(dochod)+parseFloat(vat);
	suma = suma.toFixed(2);
	return suma;
}

function serialize (mixed_value) {
    // Returns a string representation of variable (which can later be unserialized)  
    // 
    // version: 910.813
    // discuss at: http://phpjs.org/functions/serialize
    // +   original by: Arpad Ray (mailto:arpad@php.net)
    // +   improved by: Dino
    // +   bugfixed by: Andrej Pavlovic
    // +   bugfixed by: Garagoth
    // +      input by: DtTvB (http://dt.in.th/2008-09-16.string-length-in-bytes.html)
    // +   bugfixed by: Russell Walker (http://www.nbill.co.uk/)
    // +   bugfixed by: Jamie Beck (http://www.terabit.ca/)
    // +      input by: Martin (http://www.erlenwiese.de/)
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // -    depends on: utf8_encode
    // %          note: We feel the main purpose of this function should be to ease the transport of data between php & js
    // %          note: Aiming for PHP-compatibility, we have to translate objects to arrays
    // *     example 1: serialize(['Kevin', 'van', 'Zonneveld']);
    // *     returns 1: 'a:3:{i:0;s:5:"Kevin";i:1;s:3:"van";i:2;s:9:"Zonneveld";}'
    // *     example 2: serialize({firstName: 'Kevin', midName: 'van', surName: 'Zonneveld'});
    // *     returns 2: 'a:3:{s:9:"firstName";s:5:"Kevin";s:7:"midName";s:3:"van";s:7:"surName";s:9:"Zonneveld";}'
    var _getType = function (inp) {
        var type = typeof inp, match;
        var key;
        if (type == 'object' && !inp) {
            return 'null';
        }
        if (type == "object") {
            if (!inp.constructor) {
                return 'object';
            }
            var cons = inp.constructor.toString();
            match = cons.match(/(\w+)\(/);
            if (match) {
                cons = match[1].toLowerCase();
            }
            var types = ["boolean", "number", "string", "array"];
            for (var i=0; i<types.length; i++) {
                if (cons == types[i]) {
                    type = types[i];
                    break;
                }
            }
        }
        return type;
    };
    var type = _getType(mixed_value);
    var val, ktype = '';
    
    switch (type) {
        case "function": 
            val = ""; 
            break;
        case "boolean":
            val = "b:" + (mixed_value ? "1" : "0");
            break;
        case "number":
            val = (Math.round(mixed_value) == mixed_value ? "i" : "d") + ":" + mixed_value;
            break;
        case "string":
            val = "s:" + encodeURIComponent(mixed_value).replace(/%../g, 'x').length + ":\"" + mixed_value + "\"";
            break;
        case "array":
        case "object":
            val = "a";
            /*
            if (type == "object") {
                var objname = mixed_value.constructor.toString().match(/(\w+)\(\)/);
                if (objname == undefined) {
                    return;
                }
                objname[1] = this.serialize(objname[1]);
                val = "O" + objname[1].substring(1, objname[1].length - 1);
            }
            */
            var count = 0;
            var vals = "";
            var okey;
            var key;
            for (key in mixed_value) {
                ktype = _getType(mixed_value[key]);
                if (ktype == "function") { 
                    continue; 
                }
                
                okey = (key.match(/^[0-9]+$/) ? parseInt(key, 10) : key);
                vals += this.serialize(okey) +
                        this.serialize(mixed_value[key]);
                count++;
            }
            val += ":" + count + ":{" + vals + "}";
            break;
        case "undefined": // Fall-through
        default: // if the JS object has a property which contains a null value, the string cannot be unserialized by PHP
            val = "N";
            break;
    }
    if (type != "object" && type != "array") {
        val += ";";
    }
    return val;
}

function zoomVisualization(mini) {
	if (!mini.src)
		return;
	var v = mini.src.match(/(.+)\/(\d+_[a-fA-F0-9]+_\d+_[A-Za-z0-9]+)/);
	var vurl = v[1]+'/'+v[2]+'.png';
	
	var img = new Image();
	img.onload = function() {
		var dialog = $('<div></div>').dialog({
			width: img.width+30, 
			height: img.height+30,
			bgiframe: true,
			modal: true,

			buttons: {
				OK:function(){$(this).dialog('close');}
			}});
		dialog.append(img);
	};
	img.src = vurl;
}

function buy(auth) {
	if ($('#buyform select[name=size]').val() == "0") {
		alert(_("Wybierz rozmiar."));
		return;
	} else if ($('#qtytotal').val() <= 0) {
		alert(_("Wprowadź ilości zamawianych produktów."));
		return;
	}
	var msg = "";
	if (auth) {
		if (auth.status) {
			$('#product_params').val($('.privateitem-param').serialize());
			$('#buyform').submit();
			return false;
		} else {
			msg = auth.msg;
		}
	} else {
		$('#buyform').addClass('ui-state-disabled');
		$('#buyform').addClass('progress');
		$.post('/get', { func: "login" }, buy, "json");
		return false;
	}

	lform = $('<form onsubmit="return false;"><div style="color:red;font-weight:bold;">'+msg+'</div>'+
			_('e-mail')+':<br /><input type="text" name="email" /><br />'+
			_('hasło')+':<br /><input type="password" name="password" /><br />'+
			'</form>');
	
	var buttons = new Object();
	buttons[_('Zaloguj')] = function() { this.nohideprog = true; $(this).dialog('close'); $.post('/get', $(this).serialize()+'&func=login', buy, 'json');};
	buttons[_('Rejestracja')] = function() { this.nohideprog = true; document.location.href = '/sklep/'+shopname+'/rejestracja/'; };
	
	lform.dialog({
		autoOpen: false,
		bgiframe: true,
		modal: true,
		title: _('Logowanie'),
		close: function (ev) {
			if (! this.nohideprog) {
				$('#buyform').removeClass('ui-state-disabled');
				$('#buyform').removeClass('progress');	
			}
			this.nohideprog = false;
		},
		buttons: buttons
	});
	lform.dialog('open');
	return false;
}

function ajax_login(form) {
	var dialog = $('<div title="'+_('Logowanie')+'" style="text-align:center;font-weight:bold;padding:10px;font-size:14px;">'+
				'<img src="/img/progress.gif" alt="" /><br />'+_('Proszę czekać.')+'<br />'+_('Logowanie użytkownika...')+'</div>').dialog({
					modal:true
				});
	
	$.post('/get', $(form).serialize()+'&func=login', function(data) {
		if (data.status) {
			dialog.css('color', 'green');
			dialog.text(_('Logowanie powiodło się.'));
			document.location.href = $(form).attr('action');
		} else {
			dialog.empty();
			dialog.css('color', 'red');
			dialog.text(data.msg);
			dialog.dialog('option', 'buttons', { 'OK': function(){$(this).dialog('close');}});
			form.reset();
		}
	}, 'json');
	return false;
}

function ajax_logout(cl) {
	var dialog = $('<div title="'+_('Logowanie')+'" style="text-align:center;font-weight:bold;padding:10px;font-size:14px;">'+
			'<img src="/img/progress.gif" alt="" /><br />'+_('Proszę czekać.')+'<br />'+_('Wylogowywanie użytkownika...')+'</div>').dialog({
				modal:true
			});
	$.post('/get', { func: 'login', logout: 1 }, function(data) {
		if (data.status) {
			document.location.href = $(cl).attr('href');
		} else {
			dialog.css('color', 'green');
			dialog.text(_('Wylogowanie powiodło się.'));
			document.location.reload(true);
		}
	}, 'json');
	return false;
}

function openShopConfigurator(shop, pid) {
	
	var isIE=(navigator.appName.indexOf("Microsoft")!=-1)?1:0;

	if (isIE) {
		$('<div><div class="ui-state-error" style="text-align:center;">Przepraszamy, ale konfigurator produktów jeszcze nie działa poprawnie w przeglądarce Internet Explorer.<br />'+
				'Jeżeli chcesz skorzystać z tej opcji odwiedź naszą stronę przy pomocy jednej z alternatywnych przeglądarek internetowych.</div>'+
				'<div style="padding:10px;text-align:center;">'+
				'<a style="margin:10px;" href="http://www.mozilla.com/pl/firefox?from=sfx&amp;uid=0&amp;t=345"><img src="http://sfx-images.mozilla.org/affiliates/Buttons/firefox3/Polish/fx-PL1-110x32.png" alt="Spread Firefox Affiliate Button" border="0" /></a>'+
				'<a style="margin:10px;" href="http://my.opera.com/community/download.pl?p=opera_desktop"><img src="http://promote.opera.com/buttons/opera88x31-1.gif" alt="Opera, the fastest and most secure web browser"></a>'+
				'</div></div>').dialog({width:400,buttons:{OK:function(){$(this).dialog('close');}}});
		return;
	}
	var link = '';
	if (pid) {
		link = '/myshops/'+shop+'/products?action=editproduct&id='+pid;
	} else {
		link = '/myshops/'+shop+'/products?action=addproduct';
	}
	window.open(link, '', 'width=1050px, resizable, scrollbars');
}

function previewParam(cl) {
	cl = $(cl);
	var paramkey = cl.attr('name').substr(4);
	var itemid = $('#product_id').val();
	var opt = $('#product_option').val();
	var param = cl.val();
	
	$.fn.ceebox.overlay();
	$.post('/get', { func: 'prevPrivateParam', id: itemid, opt: opt, pk: paramkey, val: param }, function(data) {
		if (data.status) {
			if (data.preview) {
				var c = '<div id="prevParamHolder" style="display:none;">';
				for (var i=0; i<data.preview.length; i++) {
					c += '<a href="'+data.preview[i].img+'">'+i+'</a>';
				}
				c += '</div>';
				
				$('body').append(c);
				$('#prevParamHolder').ceebox({unload:function(){
					$('#prevParamHolder').remove();
				}});
				$('#prevParamHolder a:first').click();
				
				return true;
			} else {
				$.fn.ceebox.popup('<div style="text-align:center;padding:10px;font-weight:bold;">'+data.msg+'</div>',{width:300,height:50});
			}
		}
		cl.val('');
	}, 'json');
}

function trigerError() {
	var dialog = $('<form><b>'+_('Strona:')+'</b><br />'+
			'<input style="width:100%;" type="text" name="url" class="ui-state-disabled" readonly="readonly" value="" /><br />'+
			'<b>'+_('Opis błędu:')+'</b><br />'+
			'<textarea style="width:100%; height:200px;" name="desc"></textarea></form>').dialog({
				modal:true,
				width: '400px',
				title: _('Zgłoszenie błędu na stronie'),
				buttons: {
					'Zgłoś Błąd': function() { 
						$.post('/get', dialog.serialize()+'&func=triger_error', function(data) {
							if (data.status) {
								dialog.html('<div style="text-align:center;color:green;font-weight:bold;">'+data.msg+'</div>');
							} else {
								dialog.html('<div style="text-align:center;color:red;font-weight:bold;">'+data.msg+'</div>');
							}								
							dialog.dialog('option', 'buttons', { 'OK': function() {$(this).dialog('close');} } );
						}, 'json');					
					},
					'Anuluj': function() { $(this).dialog('close'); }
				}
			});
	dialog.find('input').val(document.location.href);
}

function addVideoDL(name) {
	$("#cee_title").append('<div style="float:right;">'+_('Pobierz ten film')+': <a href="/video/'+name+'">'+name+'</a></div>');
}

$(function(){
	$('.ui-hover').hover(function() { $(this).addClass('ui-state-hover');}, function() { $(this).removeClass('ui-state-hover'); });
	$('.ui-focus').focus(function() { $(this).addClass('ui-state-focus');}).blur(function() { $(this).removeClass('ui-state-focus');});
	
	$.extend($.fn.ceebox.videos,{
		xt24 : {
			siteRgx: /^xt24_video:/i, 
			idRgx: /:(.*)$/, 
			src: "/video/flowplayer.swf",
			flashvars: {
				allowfullscreen: false,
				config: $.toJSON({
					plugins: {
						controls:{
							//"backgroundColor":"#000000",
							//"backgroundGradient":"low"
							autoHide: "always",
							scrubber: true,
							backgroundColor: '#0C5C60',
							backgroundGradient: 'low', 
							
							bufferColor: '#FFC400',
							progressColor: '#FF5000',
							
							timeColor: '#0C5C60',
							durationColor: '#042627',
							
							
							buttonColor: '#E87516',
							buttonOverColor: '#FFC400'
							
						},
						xt24stream: { 
					        url: '/video/flowplayer.xt24stream.swf' 
					    } 
					},
					clip: {
						url: "/video/[id]",
						scaling: 'fit',
						provider: 'xt24stream' 
					}
				})
			}
			
		}
	});
	
	$('.ceebox').ceebox();
	
	if ($('#shopcart').size() > 0) {
		$.post('/get', { func: 'cart_get' }, parsecart, 'json');
	}
	//globalcatmenu
	$('#globalcatmenu ul').hide();

	$('#globalcatmenu img.slider').toggle(
			function() { $(this).attr('src', '/img/kat/minus.png'); $(this).next().next().slideDown();},
			function() { $(this).attr('src', '/img/kat/plus.png'); $(this).next().next().slideUp();}
	);
	$('#globalcatmenu ul:first').show();
	$('#globalcatmenu .opencat').parents().children('img').click();
	$('#globalcatmenu .opencat').children('img').click();
	//$('#globalcatmenu .opencat').
	
	$('#globalcatmenu ul:first').slideDown();
	
	$('#fb-widget').hover(function() {
		$('#fb-widget .flogo').hide();
		$('#fb-widget').animate({
		    width: '246px',
		    height: '290px'
		  }, 300);
		
	}, function () {
		$('#fb-widget').animate({
		    width: '32px',
		    height: '32px'
		  }, 300, function() { $('#fb-widget .flogo').show(); });
	});
	
	
});

