/**
 * common.
 */
var fixnetUtils = {
	jsonRequest: function(url, fresult, ferror, params) {
		try {
			var req = new XMLHttpRequest();
			req.open('GET', url, true);
			req.onreadystatechange = function (e) {
				if (req.readyState == 4) {
					var rj = null;
					var success = false;

	//				console.log("REQ.");

					if(req.status == 200 || req.status == 0) {
	//					console.log("response: '%s'", req.responseText);

						try {
							eval("rj = " + req.responseText + ";");
							success = true;
						} catch(err) {
							console.warn("Invalid result: %o", err);
						}
					} else {
						console.warn("Error loading page: %o", req);
					}

					if(success || !ferror) fresult(rj);
					else ferror();
				}
			};
			req.send(null);
		} catch(err) {
			console.warn("Invalid request: %o", err);

			if(!ferror) fresult(null);
			else ferror();
		}

	}
};


/* popup image/flash/video megjelenito */
function showImage(img, w, h) {
	var scrollbars = 1;
	if(w == null) w = 200;
	if(h == null) h = 200;
	ww = w;
	wh = h;
	if (img.toLowerCase().substr(img.length - 4, 4) == '.flv') {
		h = h + 45;
		scrollbars = 0;
	} else {
		scrollbars = 1;
		if (is.ie) {
			w = w + 20;
		}
	}
	var win = window.open("about:blank", "_blank", "width=" + w + ",height=" + h + ",status=0,resizable=1,scrollbars=" + scrollbars);
	var doc = win.document;

	doc.write('<html xmlns="http://www.w3.org/1999/xhtml"><head><title></title></head>');
	doc.write('<body style="margin: 0px;">');
	if (img.toLowerCase().substr(img.length - 4, 4) == '.swf') {
		doc.write('<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" width="' + w + '" height="' + h + '" title="">  <param name="movie" value="' + img + '" />  <param name="quality" value="high" />  <embed src="' + img + '" quality="high" pluginspage="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="' + w + '" height="' + h + '"></embed>  </object>');
	} else if (img.toLowerCase().substr(img.length - 4, 4) == '.flv') {
		//url = '/video/player.swf?videoURL=' + img + '&amp;_w=' + w + '&amp;_h=' + (h + 40);
		url = '/video/playerx.swf?videoURL=' + img + '&amp;skinURL=/video/SkinDeepskeye.swf';
		doc.write('<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" width="' + w + '" height="' + h + '">  <param name="allowScriptAccess" value="sameDomain" />  <param name="allowFullScreen" value="true" />  <param name="movie" value="' + url + '" />  <param name="quality" value="high" />  <param name="bgcolor" value="#ffffff" />  <param name="scale" value="noscale" />  <param name="salign" value="lt" />  <embed src="' + url + '" quality="high" bgcolor="#ffffff" width="' + w + '" height="' + h + '" scale="noscale" salign="lt" name="playerx" align="middle" allowScriptAccess="sameDomain" allowFullScreen="true" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer" />  </object>');
	} else {
		doc.write('<img src="' + img + '" alt="" onclick="window.close();" style="cursor: pointer;">');
	}
	doc.write('</body></html>');
	doc.close();
	return false;
}

/* bookmark this page */
function bookmarkPage(title) {
	url = location.href;
	if (window.sidebar) { // firefox
		window.sidebar.addPanel(title, url, '');
	} else if (window.opera && window.print) { // opera
		var e = document.createElement('a');
		e.setAttribute('href', url);
		e.setAttribute('title', title);
		e.setAttribute('rel', 'sidebar');
		e.click();
	} else if (document.all) { // ie
		window.external.AddFavorite(url, title);
	}
	return false;
}

/* print this page */
function printPage() {
	window.print();
	return false;
}


function hirlevelDel() {
	var f = document.getElementById('f_hirlevel');

	if(f) {
		f.f_hirlevel_method.value = "unsubscribe";
		f.submit();
	}
}

if(typeof HTDefaultFloatMenuView != 'undefined') {
	function FixnetFloatMenuView(descriptor) {
		HTDefaultFloatMenuView.call(this, descriptor);
	}

	FixnetFloatMenuView.prototype = {
		element: HTDefaultFloatMenuView.prototype.element,
		childElements: HTDefaultFloatMenuView.prototype.childElements,

		show: function(x, y) {
			this.menu.getAnchorElement().className = "sel";

			return HTDefaultFloatMenuView.prototype.show.call(this, x, y + 4);
		},

		hide: function() {
			this.menu.getAnchorElement().className = "";

			return HTDefaultFloatMenuView.prototype.hide.call(this);
		},

		isVisible: HTDefaultFloatMenuView.prototype.isVisible,
		getMenuItem: HTDefaultFloatMenuView.prototype.getMenuItem,
		jsonMenuItemList: HTDefaultFloatMenuView.prototype.jsonMenuItemList,

		jsonMenu: function() {
			var json = this.jsonMenuItemList();
			json.unshift("div");
			json = [ "div", { 'class': 'flmenu' }, json ];
			return json;
		},

		jsonMenuItem: function(d) {
			if(typeof d.href != 'undefined') {
	//			return [ "a", { 'href': d.href }, d.title ];

				if(typeof d.child != 'undefined') {
					return [ "b", [ "a", { 'href': d.href }, d.title ] ];
				} else {
					return [ "a", { 'href': d.href }, d.title ];
				}
			} else {
				return null;
			}
		},

		attachToMenu: function(menu) {
			this.menu = menu;
		}
	};
}

function UserAddresses(element) {
	var addrs = Array();
	for(var i = 0, max = fixnet_user_addresses.length; i < max; i++) {
		var a = fixnet_user_addresses[i];
		addrs[a.id_user_address] = a;

		var s = a.bill_company + ' ' + a.bill_zip + ', ' + a.bill_addr + ' (' + a.bill_tel + ')';
		var jo = [ 'option', { 'value': a.id_user_address }, s ];

		element.appendChild(jsonML(jo));
	}

	var v = document.forms['address']['user[id_user_address]'].value;
	if(v != '') element.value = v;


	CaptureEvent(element, "change", function() {
		var addr;

		if(element.value == '') {
			addr = { 'id_user_address': '', 'ship_name': '', 'ship_company': '', 'ship_country':'', 'ship_zip': '', 'ship_city': '', 'ship_addr': '', 'ship_remark': '', 'bill_afa': 0, 'bill_name': '', 'bill_company': '', 'bill_country': '', 'bill_zip': '', 'bill_city': '', 'bill_addr': '', 'bill_tel': '', 'bill_adoszam': ''};
		} else {
			addr = addrs[element.value];
		}

		var form = document.forms['address'];
		for(var i in addr) {
			var i1 = 'user[' + i + ']';
			if(form[i1]) {
				if(form[i1].type == 'checkbox') {
					form[i1].checked = addr[i] == form[i1].value;
				} else {
					form[i1].value = addr[i];
				}
			}
		}
	}, true);
}

function FixnetRating() {
	var element = document.getElementById('rating');
	if(element == null) return;

	console.log("element: %o", element);

	var r = Number(element.getAttribute('fixnet:rating'));
	var r = Math.max(Math.min(r, 5), 0);

	var rUrlVal = element.getAttribute('fixnet:rateURL');

	var r0 = 0;
	var rval = " " + String(r).replace(".", ",");
	var r1 = Math.round(18 * r + 2 * Math.floor(r));

	var buttons = new Array();

	var tween = new HTTween(function(x) {
		buttons.red.style.width = Math.round(r0 + (r1 - r0) * x) + "px";
	}, 'sinoidal');

	function rUrl(v) {
		return rUrlVal.replace("%7BVALUE%7D", v);
	}

	var aa;
	element.appendChild(aa = jsonML([ 'u',
		[ 'a', { 'href': rUrl(1), 'element': buttons, 'elementId': 0, 'onmouseover': over(1), 'onmouseout': out(1) } ],
		[ 'a', { 'href': rUrl(2), 'element': buttons, 'elementId': 1, 'onmouseover': over(2), 'onmouseout': out(2) } ],
		[ 'a', { 'href': rUrl(3), 'element': buttons, 'elementId': 2, 'onmouseover': over(3), 'onmouseout': out(3) } ],
		[ 'a', { 'href': rUrl(4), 'element': buttons, 'elementId': 3, 'onmouseover': over(4), 'onmouseout': out(4) } ],
		[ 'a', { 'href': rUrl(5), 'element': buttons, 'elementId': 4, 'onmouseover': over(5), 'onmouseout': out(5) } ]
	]));
	if(is.ie) {
		var aap = jgtc.getBounds(aa);
		aa.style.left = aap.x + 'px';
		aa.style.top = aap.y + 'px';
	}
	aa = null;
	element.appendChild(jsonML([ 'b', [ 'i', { 'element': buttons, 'elementId': 'red' } ] ]));
	element.appendChild(jsonML(rval));

	function over(i) {
		return function() {
			tween.cancel();
			buttons.red.style.width = (i * 20) + "px";
		}
	}

	function out(i) {
		return function() {
			r0 = i * 20;
			tween.start(0, 1, 6 * Math.abs(r1 - r0));
		}
	}

	tween.start(0, 1);
}

function FixnetTermekImages() {
	var element = document.getElementById('termek_images');
	if(element == null) return;

	var bigElement = document.getElementById('termek_big');
	if(bigElement == null) {
		console.warn("'termek_big' not found");
		return;
	}

	jgtc.captureEvent(bigElement, 'load', function() {
		loaderElement.style.display = 'none';
		bigElement.style.display = '';
	}, false);

	var loaderElement = document.getElementById('termek_big_loader');
	if(loaderElement == null) {
		console.warn("'termek_big_loader' not found");
		return;
	}

	console.log("element: %o", element);

	function load(im) {
		console.log('load: %o', im);

		if(!is.ie) {
			loaderElement.style.display = '';
			bigElement.style.display = 'none';
		}

		var w = im[2], h = im[3];
		if(w > 396) {
			w = 396;
			h = Math.round(w / im[2] * im[3]);
		}
//		console.log('w: %d, h: %d', w, h);

		bigElement.src = "/termek_image.php?termek_image[name]=" + escape(im[0]) + "&termek_image[ext]=" + escape(im[1]) + "&termek_image[w]=" + im[2] + "&termek_image[h]=" + im[3];

/*
		if(im[1] == 'flv') {
			bigElement.innerHTML = '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="' + w + '" height="' + w + '" id="playerx" align="middle">' +
				'<param name="scale" value="noscale" /><param name="salign" value="lt" /><param name="allowScriptAccess" value="sameDomain" /><param name="allowFullScreen" value="true" /><param name="movie" value="/flash/playerx.swf?videoURL=/img/up/pic_' + im[0] + '.' + im[1] + '&amp;skinURL=/flash/SkinFixnet.swf" /><param name="quality" value="high" /><param name="wmode" value="opaque" /><param name="bgcolor" value="#ffffff" />' +
				'<embed src="/flash/playerx.swf?videoURL=/img/up/pic_' + im[0] + '.' + im[1] + '&amp;skinURL=/flash/SkinFixnet.swf" quality="high" scale="noscale" salign="lt" wmode="opaque" bgcolor="#ffffff" width="' + w + '" height="' + h + '" name="playerx" align="middle" allowScriptAccess="sameDomain" allowFullScreen="true" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer" /></object>';
			loaderElement.style.display = 'none';
			bigElement.style.display = '';
		} else {
			var limg = new Image();
			limg.src = '/img/up/pic_' + im[0] + '.' + im[1];
			limg.onload = function() {
				bigElement.innerHTML = '<img src="' + limg.src + '" alt="" style="width: ' + im[2] + 'px; height: ' + im[3] + 'px;" />'

				loaderElement.style.display = 'none';
				bigElement.style.display = '';
			}
		}
*/

	}

/*
	FixnetTermekImages_loaded = function() {
		loaderElement.style.display = 'none';
		bigElement.style.display = '';
	}
*/

	function _click(im) {
		return function(e) {
			if(!e) e = event;
			jgtc.discardEvent(e);

			load(im);
		}
	}

	var mode = 0;

	function _walk(e) {
		for(var e1 = e.firstChild; e1 != null; e1 = e1.nextSibling) {
			if(e1.nodeType == 1) {
				var v;
				if((v = jgtc.safeGetAttribute(e1, 'fixnet:itemImage')) != null) {
					try {
						var im;
						eval('im = [' + v + '];');
//						console.dir(im);

						var cf = _click(im);
						jgtc.captureEvent(e1, 'click', _click(im), false);
						if(mode == 0) {
							load(im);
							mode = 1;
						}
					} catch(err) {
						console.warn("Invalid fixnet:itemImage (%s)", v);
						console.dir(err);
					}
				} else {
					_walk(e1);
				}
			}
		}
	}

	_walk(element);
}

/*
var FixnetTermekImages_loaded = function() {
	console.warn("Before init...");
}
*/

function FixnetBasket() {
	if('singleton' in FixnetBasket) {
		console.error("A FixnetBasket objektum egy singleton.");
		return;
	}

	FixnetBasket.singleton = this;

	this.element = document.getElementById('fixnet_basket_btn');
	if(this.element == null) return;

	console.log("element: %o", this.element);

	var panel = null;
	var _this = this;

	function _close() {
		if(panel) {
			panel.parentNode.removeChild(panel);
			_this.element.className = "";
			panel = null;
		}
	}

	jgtc.captureEvent(this.element, "click", function(e) {
		if(!e) e = event;
		jgtc.discardEvent(e);

		if(panel) {
			_close();
		}

		var p = jgtc.getBounds(_this.element);
		var jb = [ 'div', { 'class': "pan_basket", 'style': "left: " + (p.x + p.w - 485) + "px; top: " + (p.y + p.h) + "px;" },
			[ "iframe", { 'src': "/basket.php?user[panel]=default", 'frameBorder': 0, 'scrolling': "no", 'fixnetClose': _close } ]
		];

		panel = jsonML(jb);
		document.body.appendChild(panel);
		_this.element.className = "sel";
	}, false);
}

FixnetBasket.updateButton = function(numTetel) {
	if(FixnetBasket.singleton.element == null) {
		return;
	}

	var str = "<b>Kosár";
	if(numTetel) {
		str += " <small>(" + numTetel + " tétel)</small>";
	}
	str += "</b>";

	FixnetBasket.singleton.element.innerHTML = str;
}

function FixnetPanClose() {
	var element = document.getElementById('fixnet_pan_close');
	if(element == null) return;

	console.log("element: %o", element);

	jgtc.captureEvent(element, "click", function() {
		if(typeof window.frameElement != 'undefined') {
			window.frameElement.fixnetClose();
		}
	}, false);
}

function FixnetTabPane(id) {
	var element = document.getElementById(id);
	if(element == null) return;

	console.log("element: %o", element);

	var buttons = new Object();
	var panes = new Array();
	var selected = 0;

	function click(i) {
		return function(e) {
			if(!e) e = event;
			jgtc.discardEvent(e);

			with(panes[selected]) {
				pane.style.display = 'none';
				button.className = '';
			}

			with(panes[i]) {
				pane.style.display = '';
				button.className = 'sel';
			}

			selected = i;
		}
	}

	function _walk(e) {
		for(var e1 = e.firstChild; e1 != null; e1 = e1.nextSibling) {
			if(e1.nodeType == 1) {
				var t;
				if((t = jgtc.safeGetAttribute(e1, 'fixnet:paneButton')) != null) {
//					console.dir(e1);

					buttons[t] = e1;
				} else if((t = jgtc.safeGetAttribute(e1, 'fixnet:pane')) != null) {
					panes.push({ 'name': t, 'pane': e1 });
				} else {
					_walk(e1);
				}
			}
		}
	}

	_walk(element);

	for(var i = 0; i < panes.length; i++) {
		var p = panes[i];
		p.button = buttons[p.name];
		if(i != selected) {
			p.pane.style.display = 'none';
		} else {
			p.button.className = 'sel';
		}

		jgtc.captureEvent(p.button, "click", click(i), false);
	}

	buttons = null;
}


/**
 * Felhasználónév / jelszó input mezők, a login boxban
 */
/*
function FixnetLogin() {
	function inp_descr(inp, descr) {
		var element = document.getElementById(inp);
		var pass;

		function _in() {
			element.value = '';
			element.style.color = '';
			if(pass) {
				element.type = 'password';
			}
		}

		function _out() {
			if(pass) {
				element.type = 'text';
			}
			element.value = descr;
			element.style.color = 'gray';
		}

		if(element != null) {
			pass = element.type == 'password';
			if(element.value == '') {
				_out();
			}

			jgtc.captureEvent(element, "focus", function() {
				if(element.value == descr) {
					_in();
				}
			}, false);

			jgtc.captureEvent(element, "blur", function() {
				if(element.value == '') {
					_out();
				}
			}, false);
		}
	}

	inp_descr("flogin_user", "Felhasználónév");
	inp_descr("flogin_password", "Jelszó");
}
*/

/**
 * 'kosárba' gombok kezelése
 */
function FixnetBasketLink(element, descriptor) {
//	console.log("FixnetBasket(%o, %o)", element, descriptor);

	jgtc.captureEvent(element, "click", function(e) {
		jgtc.discardEvent(e);

		fixnetUtils.jsonRequest(descriptor.url,
			function(res) {
				console.dir(res);
				if(res.resultCode == 0) {
					FixnetBasket.updateButton(res.items);
					alert(res.resultText);
				}
			},
			function() {
//				document.location.href = element.href;
				console.log("errrr.");
			});
	}, false);
}

/**
 * init
 */
jgtc.captureEvent(window, "load", function() {
	var e = document.getElementById("fixnet_addr_list");
	if(e != null) new UserAddresses(e);

	new FixnetRating();
	new FixnetTermekImages();
	new FixnetBasket();
	new FixnetPanClose();
	new FixnetTabPane('jpane_tartozek');
	new FixnetTabPane('jpane_kapcs');
//	new FixnetLogin();

	var ebList = document.getElementsByTagName("A");
	for(var i = 0; i < ebList.length; i++) {
		var eb = ebList.item(i);
		var ebd = jgtc.safeGetAttribute(eb, 'fixnet:basket');
		if(ebd !== null) {
			var descriptor;
			try {
				eval('descriptor = { ' + ebd + '};');
			} catch(err) {
				console.error("Hibás 'fixnet:basket' descriptor: %s (%s)", ebd, err.message);
				continue;
			}

			new FixnetBasketLink(eb, descriptor);
		}
	}
}, false);

