﻿/**
* jQuery Async Basket Plugin
*
* required : jQuery 1.4.x / jQuery UI 1.8.x
*/
(function($) {
	$.fn.asyncbasket = function(options) {
		var elements = this;

		var settings = $.extend({
			'oid': '',
			'cart_element': '#getall',
			'thumb_width': 0,
			'thumb_height': 0,
			'line_prefix': '#_ctl5_label_',
			'success_message': '商品をカートに入れました',
			'dialog_width': 400,
			'dialog_height': 100,
			'dialog_id': 'AsyncBasketConfirm',
			'dialog_element': '#async-cart-dialog'
		}, options);

		$.fn.extend({
			load: function() {
				$.ajax({
					url: "AsyncBasket.svc/get",
					type: "get",
					data: "oid=" + settings.oid + "&width=" + settings.thumb_width + "&height=" + settings.thumb_height + "&t=" + (new Date()).getTime(),
					success: function(result) {
						$(settings.cart_element).html(result);
					},
					error: function(XMLHttpRequest, textStatus, errorThrown) {
						// alert("error. tag couldn't be added.");
					}
				});
			},

			deleteItem: function(line_id) {
				$.ajax({
					url: "AsyncBasket.svc/delete",
					method: "get",
					data: "oid=" + settings.oid + "&lineId=" + line_id + "&t=" + (new Date()).getTime(),
					success: function(result) {
						$.fn.load();
					},
					error: function(XMLHttpRequest, textStatus, errorThrown) {
						// alert("error. tag couldn't be added.");
					}
				});
			},

			addLink: function(sku, quantity, option) {
				var url = "_AddMultiProduct.aspx?shop_cd_01=" + settings.oid + "&sku_01=" + sku + "&qty_01=" + quantity + option;
				document.location = url;
			},

			addItem: function(sku, group) {
				var quantity = elements.val();
				$.ajax({
					url: "AsyncBasket.svc/add",
					method: "get",
					data: "oid=" + options.oid + "&sku=" + sku + "&qty=" + quantity + "&group=" + group + "&t=" + (new Date()).getTime(),
					success: function(result) {
						switch (result) {
							case "NONE":
								$(settings.line_prefix + settings.oid + '_' + sku).html(settings.success_message);
								break;
							case "CAUTION":
								$.fn.getErrorInfo(sku, quantity, "1");
								break;
							case "ERROR":
								$.fn.alertErrorInfo(sku, quantity, "1");
								break;
							default:
								break;
						}
						$.fn.load();
					},
					error: function(XMLHttpRequest, textStatus, errorThrown) {
						// alert("error. tag couldn't be added.");
					}
				});
			},

			getErrorInfo: function(sku, quantity, group) {
				$.ajax({
					url: "AsyncBasket.svc/error?t=" + (new Date()).getTime(),
					method: "get",
					success: function(result) {
						$.fn.showCaution(sku, quantity, group, result);
					},
					error: function(XMLHttpRequest, textStatus, errorThrown) {
						// alert("error. tag couldn't be added.");
					}
				});
			},
	
			alertErrorInfo: function() {
				$.ajax({
					url: "AsyncBasket.svc/error?t=" + (new Date()).getTime(),
					method: "get",
					success: function(result) {
						alert(result);
					},
					error: function(XMLHttpRequest, textStatus, errorThrown) {
						// alert("error. tag couldn't be added.");
					}
				});
			},

			showCaution: function(sku, quantity, group, message) {
				$(settings.dialog_element).dialog({
					title: message,
					modal: true,
					width: settings.dialog_width,
					height: settings.dialog_height,
					buttons: {
						"カートへ": function() {
							$(this).dialog("close");
							$.fn.addItem(sku, quantity, group);
						},
						"戻る": function() {
							$(this).dialog("close");
						}
					}
				});
			}
		});

		return this;
	};
})(jQuery);

/**
* jQuery Async Bookmark Plugin
*
* required : jQuery 1.4.x / jQuery UI 1.8.x
*/
(function($) {
	$.fn.asyncbookmark = function(options) {
		var elements = this;

		var settings = $.extend({
			'oid': '',
			'bookmark_element': '#bookmark_getall',
			'thumb_width': 0,
			'thumb_height': 0,
			'max': 0,
			'line_prefix': '#_ctl5_label_',
			'dialog_id': '#asyncbookmark_dialog',
			'dialog_zindex': 100,
			'param': 'value'
		}, options);

		$.fn.extend({
			load: function(folder_id) {
				$.ajax({
					url: "AsyncBookmark.svc/get",
					type: "get",
					data: "width=" + settings.thumb_width + "&height=" + settings.thumb_height + "&max=" + settings.max + "&fid=" + folder_id + "&t=" + (new Date()).getTime(),
					success: function(result) {
						$(settings.bookmark_element).html(result);
					},
					error: function(XMLHttpRequest, textStatus, errorThrown) {
						// alert("error. tag couldn't be added.");
					}
				});
			},

			addItem: function(sku, folder_id, operation) {
				$.ajax({
					url: "AsyncBookmark.svc/add",
					method: "get",
					data: "sku=" + sku + "&fid=" + folder_id + "&t=" + (new Date()).getTime(),
					success: function(result) {
						switch (result) {
							case true:
								$(settings.line_prefix + settings.oid + "_" + sku).html("ブックマーク に" + operation + "しました");
								break;
							default:
								break;
						}

						if ($(settings.bookmark_element)) {
							$.fn.load(folder_id);
						}
					}
				});
			},

			rename: function(parent_folder_id, folder_id, folder_name) {
				$.ajax({
					url: "AsyncBookmark.svc/renameFolder",
					scriptCharset:'UTF-8',
					method: "get",
					data: "pfid=" + parent_folder_id + "&fid=" + folder_id + "&name=" + encodeURIComponent(folder_name) + "&t=" + (new Date()).getTime(),
					success: function(result) {
						if (result) {
							RefreshPage(result);
						} else {
							alert("同じ名称のフォルダが存在するため、フォルダ名を変更できませんでした。");
						}
					}
				});
			},

			create: function(sku, parent_folder_id, folder_name) {
				$.ajax({
					url: "AsyncBookmark.svc/createFolder",
					scriptCharset: 'UTF-8',
					method: "get",
					data: "sku=" + sku + "&pfid=" + parent_folder_id + "&name=" + encodeURIComponent(folder_name) + "&t=" + (new Date()).getTime(),
					success: function(folder_id) {
						if (folder_id) {
							if (sku && sku != "") {
								$.fn.addToFolder(sku, parent_folder_id, folder_id);
							} else {
								RefreshPage(folder_id);
							}
						} else {
							alert("同じ名称のフォルダーが存在するため、作成できませんでした。");
						}
					}
				});
			},

			move: function(src_folder_id, dest_folder_id, sku) {
				$.ajax({
					url: "AsyncBookmark.svc/moveBookmark",
					method: "get",
					data: "fid=" + src_folder_id + "&sku=" + sku + "&tfid=" + dest_folder_id + "&t=" + (new Date()).getTime(),
					success: function(result) {
						if (result) {
							RefreshPage(result);
						} else {
							alert("既に登録済みです。");
						}
					}
				});
			},

			openDialog: function(width, height, title, content) {
				var dialog = $(settings.dialog_id);
				if ($(settings.dialog_id).length == 0) {
					dialog = $("<div id='" + settings.dialog_id.replace("#","") + "' style='display:hidden'></div>").appendTo("body");
				}

				$(settings.dialog_id).html(content);

				$(settings.dialog_id).dialog({
					"width": width,
					"height": height,
					dialogClass: "dialog",
					"title":title,
					modal: true,
					resizable: false,
					draggable: false,
					zIndex: settings.dialog_zindex
				});
			},

			closeDialog: function() {
				if ($(settings.dialog_id).dialog("isOpen")) {
					$(settings.dialog_id).dialog("close");
				}
			},

			addToFolder: function(sku, parent_folder_id, dest_folder_id) {
				$.ajax({
					url: "AsyncBookmark.svc/selectFolder",
					method: "get",
					data: "pfid=" + parent_folder_id + "&dfid=" + dest_folder_id + "&sku=" + sku + "&t=" + (new Date()).getTime(),
					success: function(result) {
						$.fn.openDialog(300, 200, "ブックマーク へ追加", result);
					}
				});
			},

			adhocCreate: function(parent_folder_id, sku) {
				$.ajax({
					url: "AsyncBookmark.svc/inputNewFolder",
					method: "get",
					data: "pfid=" + parent_folder_id + "&sku=" + sku + "&max=" + settings.max + "&t=" + (new Date()).getTime(),
					success: function(result) {
						$.fn.openDialog(300, 200, "新規フォルダの作成", result);
					}
				});
			},

			adhocRename: function(parent_folder_id, folder_id) {
				$.ajax({
					url: "AsyncBookmark.svc/renameFolderInput",
					method: "get",
					data: "pfid=" + parent_folder_id + "&fid=" + folder_id + "&t=" + (new Date()).getTime(),
					success: function(result) {
						$.fn.openDialog(300, 220, "フォルダの名称変更", result);
					}
				});
			},

			adhocRemoveFolder: function(parent_folder_id, folder_id) {
				$.ajax({
					url: "AsyncBookmark.svc/removeFolderSelect",
					method: "get",
					data: "pfid=" + parent_folder_id + "&fid=" + folder_id + "&t=" + (new Date()).getTime(),
					success: function(result) {
						$.fn.openDialog(300, 200, "フォルダの削除", result);
					}
				});
			},

			removeFolder: function(folder_id) {
				$.ajax({
					url: "AsyncBookmark.svc/removeFolder",
					method: "get",
					data: "fid=" + folder_id + "&t=" + (new Date()).getTime(),
					success: function(result) {
						if (result) {
							var content = "<div id='BookmarkDialog'><table><tr><td>フォルダ名「" + result + "」を削除しました。</td></tr></table><hr/><input type='button' value='閉じる' onClick=\"RefreshPage('00000000');j$('body').asyncbookmark.closeDialog();\"/></div>";
							$.fn.openDialog(300, 200, "フォルダの削除", content);
						} else {
							alert("フォルダの削除に失敗しました。");
						}
					}
				});
			},

			adhocMove: function(parent_folder_id, folder_id, sku) {
				$.ajax({
					url: "AsyncBookmark.svc/moveBookmarkSelectFolder",
					method: "get",
					data: "pfid=" + parent_folder_id + "&fid=" + folder_id + "&sku=" + sku + "&max=" + settings.max + "&t=" + (new Date()).getTime(),
					success: function(result) {
						$.fn.openDialog(300, 220, "フォルダの移動", result);
					}
				});
			}
		});

		return this;
	};
})(jQuery);

