function onChooseCartClick() {
	this.next().checked = true;
}

function onRegisterButtonClick(e) {
	var form = Event.findElement(e, 'form');
	var form_values = form.serialize(true);
	//var input_btn = form.down('input[id=register]');
	
	this.disable();

	new Ajax.Request('index.cgi', {
		method: 'post',
		parameters: form_values,
		onSuccess: regStatus,
		onFailure: function() {
			alert('Err!');
		}
	});
	Event.stop(e);
	this.enable();
}

function regStatus(transport) {
	var msg = transport.responseText.evalJSON().msg;
	//alert(msg);
	if (msg == 'captcha_wrong') {
		new Effect.Highlight($('captcha_value'), { startcolor: "#ffffff", endcolor: "#cc0000", restorecolor: "#ffffff" });
	}
}

function addUsernameEditor() {
	var el_message = $("message");
	var el_username = $('settings_username');
	var oldusername = el_username.innerHTML;
	var message = "";
	var code;
	var lang = $("lang").getAttribute("value");
	
	new Ajax.InPlaceEditor(
      el_username,
      'index.cgi?lang=' + lang,
      {
         clickToEditText: 'Klikkaa muokatakseen',
         okControl: 'link',
         formId: 'chngloginform',
         okText: 'Ok',
         cancelText: 'Peruuta',
         savingText: 'Odota...',
         highlightcolor: '#eee',
         submitOnBlur: false,
         onComplete: function(transport, el_username) {
         	if (transport != null) {
         		message = transport.responseText.evalJSON().msg;
         		code = transport.responseText.evalJSON().code;
         		if (code == 1) {
         			el_username.innerHTML = transport.responseText.evalJSON().username;
         		} else if (code == 0) {
         			el_username.innerHTML = oldusername;
         		}
         		el_message.innerHTML = message; 
         	} else {
         		el_message.innerHTML = "";
         	}
         }
      }
	);
}

function onItemImageOver() {
	new Effect.Opacity(this.down(), { from: 1.0, to: 0.7, duration: 0.5 });
	//this.down().style.opacity = 0.5; 
}
function onItemImageOut() {
	new Effect.Opacity(this.down(), { from: 0.7, to: 1.0, duration: 0.5 });
	//this.down().style.opacity = 1; 
}

function onItemImageClick(e) {
	new Effect.Shake(this.down(), { distance: 1, duration: 0.5 });
	//var src = "http://vaatekauppaoliver.webshops.fi/" + this.down().readAttribute('id');
	var src = this.down().next().readAttribute('name');
	var tooltip = this.down().next().readAttribute('value');
	$("product_image_large").down().setAttribute("src", "/" + src);
	$("product_image_large").down().setAttribute("title", tooltip);
	$("product_image_large").down().setAttribute("alt", tooltip);
}

function onDivAddressClick() {
	var bgcolor = this.getStyle("backgroundColor");
	//new Effect.Highlight(this, { startcolor: "#ffffff", endcolor: "#666666", restorecolor: bgcolor });
	this.down(0).next().down().checked = true;
}
function onSelectBillingAddressClick() {
	//new Effect.Highlight(this.up(1), { startcolor: "#ffffff", endcolor: "#cc0000", restorecolor: "#ffffff" });
}
function onSelectDeliveryAddressClick() {
	//new Effect.Highlight(this.up(1), { startcolor: "#666666", endcolor: "#cc0000", restorecolor: "#fffccc" });
}
function onLoginFormClick() {
	var arrowd = 'css/images/arrowd.png';
	var arrowl = 'css/images/arrowl.png';
	var el = $("login_form");
	var img = $("login_img");
	//Effect.toggle(el, "appear");
	el.toggle();
	if (el.visible()) {
		img.setAttribute('src', arrowd);
	} else {
		img.setAttribute('src', arrowl);
	}
}

function onFormAddressClick() {
	var ch = $("check_address");
	var el = $("delivery_address");
	//el.toggle();
	$$("#delivery_address_table input").each(function(item) {
		//item.disable();
		enableDisable(item);
	});
}
//TODO: check on/off
function enableDisable(item) {
	if(item.disabled) {
		item.setStyle({backgroundColor: '#ffffff'});
		item.enable();
		$('delivery_address_id').disabled = false;
		$('delivery_address').setStyle({border: '1px solid #fff'});
		$("delivery_address_table").setStyle({backgroundColor: '#ffffff', opacity: 1});
	} else {
		item.setStyle({backgroundColor: '#fff'});
		item.disable();
		$('delivery_address_id').disabled = true;
		$('delivery_address').setStyle({border: '1px dashed #ccc'});
		$("delivery_address_table").setStyle({backgroundColor: '#fff', opacity: 0.2});
	}
}

function onOrderHeaderClick(e) {
	//toggleOrder(this.next());
	this.next().toggle();
}

function toggleOrder(h) {
	if (h.hasClassName("blinddown")) {
		new Effect.BlindDown(h);
		h.addClassName("blindup");
		h.removeClassName("blinddown");
	} else {
		new Effect.BlindUp(h);
		h.addClassName("blinddown");
		h.removeClassName("blindup");
		h.hide();
	}
}

function onProductMouseOver(e) {
	this.setStyle( {
		border :'1px solid #ccc'
	});
}
function onProductMouseOut(e) {
	this.setStyle( {
		border :'1px solid #fff'
	});
}

function is_numeric(n) {
	return (isNaN(parseInt(n))) ? false : true;
}

function onAddToCartClick(e) {
	var id = this.previous(1).getAttribute('value');
	var qty = this.previous(0).value;

	if (is_numeric(id) && is_numeric(qty)) {
		getShoppingCart("&add=" + parseInt(id) + "&quantity=" + parseInt(qty));
	}
	Event.stop(e);
}

function onUpdateBtnClick(e) {
	var form_values = $('shopping_cart_form').serialize();
	updateShoppingCart("index.cgi?" + form_values);
	Event.stop(e);
}
function updateShoppingCart(str) {

	new Ajax.Request(str, {
		method :'get',
		onSuccess :makeShoppingCartTable,
		onFailure : function() {
			alert('Err! ' + this_url);
		}
	});
}
function onCaptchaClick(e) {
	var el = Event.element(e);
	var url = './image.cgi?';
	var r = Math.random('now');
	el.setAttribute('src', url + r);
}

function getCaptcha() {

	var this_url = "index.cgi?page_type=captcha";

	new Ajax.Request(this_url, {
		method :'get',
		onSuccess :makeCaptcha,
		onFailure : function() {
			alert('Err! ' + this_url);
		}
	});
}
function makeCaptcha(transport) {
	var data = transport.responseText;
	$('captcha').update(data);
}

function ajaxUpdater(id, path) {
	var this_url = path;
	new Ajax.Updater(id, this_url, {
		asynchronous :true
	});
}

function getShoppingCart(url) {

	if (typeof url == "undefined") {
		url = "";
	}

	var this_url = "/index.cgi?page_type=shopping_cart" + url;

	new Ajax.Request(this_url, {
		method :'get',
		onSuccess :makeShoppingCart,
		onFailure : function() {
			alert('Err! ' + this_url);
		}
	});
}

function getShoppingCartTable() {

	var this_url = "/index.cgi?page_type=shopping_cart";

	new Ajax.Request(this_url, {
		method :'get',
		onSuccess :makeShoppingCartTable,
		onFailure : function() {
			alert('Err! ' + this_url);
		}
	});
}

function itemAction(str) {

	var this_url = "/index.cgi?page_type=shopping_cart&" + str;

	new Ajax.Request(this_url, {
		method :'get',
		onSuccess :makeShoppingCartTable,
		onFailure : function() {
			alert('Err! ' + this_url);
		}
	});
}

var ShoppingCart = Class.create( {
	items :null,

	initialize : function(items) {
		this.items = items;
	},

	count : function() {
		var c = 0;
		for ( var i = 0; i < this.items.size(); i++) {
			c += parseInt(this.items[i].quantity);
		}
		return c;
	},

	total : function() {
		var t = 0.0;
		for ( var i = 0; i < this.items.size(); i++) {
			t += parseFloat(this.items[i].price)
					* parseInt(this.items[i].quantity);
		}
		return t;
	},

	list : function() {
		return this.items;
	},

	getItem : function(n) {
		return this.items[n];
	}

});

function makeShoppingCart(transport) {
	var list = transport.responseText.evalJSON(true).cart;
	var sc = new ShoppingCart(list);
	var count = sc.count();
	var total = sc.total();
	var items = sc.list();

	var buy_btn = "<div style=\"border: 0px solid #000; overflow: hidden; float: right; text-align: right; display: block; width: 100%; height: 24px;\">"
			+ "<form action=\"http://vaatekauppaoliver.webshops.fi/index.cgi\" method=\"get\">"
			+ "<div style=\"float: right;\"><input type=\"hidden\" name=\"page_type\" value=\"order\" />"
			+ "<input id=\"buy_btn\" type=\"submit\" title=\"Osta\" name=\"buy\" value=\"Osta\"/>"
			+ "</div></form></div>";
	var buybtn = "<div id=\"sform\" style=\"border: 0px solid #ccc; float: right; padding: 0px; margin: 2px 4px 4px 0px;\">"
	          + "<form action=\"http://vaatekauppaoliver.webshops.fi/index.cgi\" method=\"get\" style=\"margin: 0px; padding: 0px;\">"
	          + "<div><input type=\"hidden\" name=\"page_type\" value=\"order\" />"
	          + "<input id=\"buy_btn\" class=\"buy_btn\" type=\"submit\" title=\"Osta\" name=\"buy\" value=\"Osta\" />"
	          + "</div></form></div>";
	var items_str = "<div id=\"plist\">";
	//var div_scart_info = new Element('div', { 'id': 'scart_info' });
	//var cart_info = "<div style=\"display: block;\" id=\"scart_info\">";
//"<div id=\"cinfo\" style=\"border: 0px solid #ccc; padding-left: 4px;\">";
	var cart_info = "<div id=\"carttotal\">";
	
	if (count == 1) {
		cart_info += "<strong>" + count + "</strong> " + 'tuote';
	} else {
		cart_info += "<strong>" + count + "</strong> " + 'tuotetta';
	}
	
	cart_info += "<br />" + 'yhteensä' + " <strong>" + total.toFixed(2).replace('.', ',') + "&euro; </strong><br /></div>";

	for (i = 0; i < items.size(); i++) {
		items_str += "<a class=\"cartobj\" href=\"/" + encodeURIComponent(sc.items[i].title) + "-p" + sc.items[i].itemid + "\">"
				+ sc.items[i].quantity + "x " + sc.items[i].title + "</a>";
	}
	items_str += "</div>"; 
	items_str += cart_info;
	items_str += buybtn;

	var cartcontent = $("cartcontent");
        var carttotal = $("carttotal");

	if (count > 0) {
		cartcontent.update(items_str);
                carttotal.update(cart_info);
	} else {
		//cartcontent.insert("<div style=\"text-align: center;\"><img alt=\"\" src=\"/css/images/cartg.gif\" style=\"margin-top: 4px;\" /></div>");
		//cartcontent.insert("<div style=\"text-align: center; padding: 4px 0px 0px 0px;\">Ostoskori on tyhjä</div>");
		cartcontent.insert("<span style=\"display: block; padding: 4px;\">Ostoskori on tyhjä</span>");
	}
}

function makeShoppingCartTable(transport) {
	var sc = new ShoppingCart(transport.responseText.evalJSON(true).cart);
	var changed_items = transport.responseText.evalJSON(true).ccart;
	var count = sc.count();
	var total = sc.total();
	var items = sc.list();
	var items_str = "";
	var changed_items_str = "";
	var list;
	var cart_header = "<table id=\"sc_table\" class=\"table\" style=\"margin-left: 1px; margin-right: 1px;\"><thead><tr class=\"table_header\"><td>Tuote</td><td style=\"width: 60px; text-align: center;\">Hinta</td><td style=\"width: 80px; text-align: center;\">Määrä</td><td colspan=\"3\"></td></tr></thead>";
	var cart_footer = "<tfoot id=\"tablefooter\"><tr class=\"table_footer\"><td class=\"td_right\">yhteensä</td><td id=\"total\" class=\"td_right\" style=\"width: 60px;\">"
			+ total.toFixed(2).replace('.', ',')
			+ "&euro;"
			+ "</td><td id=\"count\" class=\"td_center\" style=\"width: 80px;\">"
			+ count
			+ "</td><td colspan=\"2\" class=\"td_center\"></td><td style=\"\" class=\"td_center\"><a href=\"?page_type=shopping_cart&amp;remove_all\" title=\"Poista kaikki\"><img alt=\"Poista kaikki\" src=\"./css/images/trash.png\" /></a></td></tr><tr class=\"table_footer\" style=\"height: 40px;\"><td class=\"td_right\" style=\"border: 0px;  background-image: none;\" colspan=\"6\"><input class=\"button\" type=\"submit\" id=\"update_cart\" name=\"update\" title=\"Päivitä\" value=\"Päivitä\" />&nbsp;<input class=\"button\" type=\"submit\" title=\"Osta\" name=\"step\" value=\"Osta\" /></td></tr></tfoot>";
	var table_end = "</table>";

	var chItemsTpl = new Template(
			"<div id=\"#{itemid}\" style=\"float: left; border-left: 1px solid #ccc; width: 60%;\">#{title}</div>");

	var tpl1 = new Template(
			'<tr class=\"row1\" id=#{rowid}><td id=#{itemid}><a href=\"#{titlelink}-p#{itemid}\">#{title}</a></td> <td class=\"td_right\" style=\"text-align: right; width: 60px;\">#{price}&euro;</td> <td class=\"td_center\" style=\"width: 80px;\"><input class=\"quantity_input\" type=\"text\" maxlength=\"4\" size=\"2\" name=\"pid[#{rowid}]\" value=\"#{quantity}\" /></td><td style=\" cursor: pointer; width: 10px;\" class=\"rm\"><img alt=\"Vähennä\" title=\"Vähennä\" src=\"./css/images/rm.png\" /></td><td style=\" cursor: pointer; width: 10px;\" class=\"add\"><img alt=\"Lisää\" title=\"Lisää\" src=\"./css/images/add.png\" /></td><td style=\" cursor: pointer; width: 10px;\" class=\"rmall\"><img alt=\"Poista\" title=\"Poista\" src=\"./css/images/trash.png\" /></td></tr>');
	var tpl2 = new Template(
			'<tr class=\"row2\" id=#{rowid}><td id=#{itemid}><a href=\"#{titlelink}-p#{itemid}\">#{title}</a></td> <td class=\"td_right\" style=\"text-align: right; width: 60px;\">#{price}&euro;</td> <td class=\"td_center\" style=\"width: 80px;\"><input class=\"quantity_input\" type=\"text\" maxlength=\"4\" size=\"2\" name=\"pid[#{rowid}]\" value=\"#{quantity}\" /></td><td style=\" cursor: pointer; width: 10px;\" class=\"rm\"><img alt=\"Vähennä\" title=\"Vähennä\" src=\"./css/images/rm.png\" /></td><td style=\" cursor: pointer; width: 10px;\" class=\"add\"><img alt=\"Lisää\" title=\"Lisää\" src=\"./css/images/add.png\" /></td><td style=\" cursor: pointer; width: 10px;\" class=\"rmall\"><img alt=\"Poista\" title=\"Poista\" src=\"./css/images/trash.png\" /></td></tr>');

	// check for changed items if any
	if (changed_items.size() > 0) {
		for (i = 0; i < changed_items.size(); i++) {
			list = {
				rowid :items[i].rowid,
				itemid :items[i].itemid,
				title :items[i].title,
				price :items[i].price.replace('.', ','),
				quantity :items[i].quantity
			};
			changed_items_str += chItemsTpl.evaluate(list);
		}
	}

	for (i = 0; i < items.size(); i++) {
		list = {
			rowid :items[i].rowid,
			itemid :items[i].itemid,
			title :items[i].title,
                        titlelink :encodeURIComponent(items[i].title),
			price :items[i].price.replace('.', ','),
			quantity :items[i].quantity
		};
		(i & 1) ? items_str += tpl2.evaluate(list) : items_str += tpl1.evaluate(list);
	}

	var tablebody = $("ShoppingCart");
	//var dttotal = $("total");
	//var dtcount = $("count");
	var changed = $("changed_items");

	if (changed_items.size() > 0) {
		if ($("notify_posted") != null) {
			$("notify_posted").remove;
		}
		changed.update("Seuraavat tuotteet ovat muuttuneet: " + changed_items_str);
	} else if ($("notify_posted") == null) {
		changed.update("");
	}

	if (count > 0) {
		tablebody.update(cart_header + cart_footer + items_str + table_end);
		//dttotal.update(total.toFixed(2).replace('.',',') + "&euro;");
		//dtcount.update(count);
	} else {
		$('ShoppingCart').update(
				"<div style=\"padding: 2em;\" class=\"errormsg\">"
						+ "Ostoskori on tyhjä"
						+ "</div>");
		$('sc_table').remove();
	}

	// start observing here
	$$('table#sc_table td.add').each( function(item) {
		item.observe('click', onAddClick);
	});
	$$('table#sc_table td.rm').each( function(item) {
		item.observe('click', onRmClick);
	});
	$$('table#sc_table td.rmall').each( function(item) {
		item.observe('click', onRmAllClick);
	});
	$('update_cart').observe('click', onUpdateBtnClick);
}
function onAddClick(e) {
	var rowid = this.up(0).getAttribute('id');
	var itemid = this.up(0).cells[0].getAttribute('id');
	var uristr = "add=" + itemid + "&rid=" + rowid;
	itemAction(uristr);
}
function onRmClick(e) {
	var rowid = this.up(0).getAttribute('id');
	var itemid = this.up(0).cells[0].getAttribute('id');
	var uristr = "rmi=" + itemid + "&rid=" + rowid;
	itemAction(uristr);
}
function onRmAllClick(e) {
	var rowid = this.up(0).getAttribute('id');
	var itemid = this.up(0).cells[0].getAttribute('id');
	var uristr = "rm=" + itemid + "&rid=" + rowid;
	itemAction(uristr);
}