Array.prototype.rand = function(s){
	var max = this.length;
	if (!s) {
		s = max;
	}
	if (s > max) {
		s = max;
	}
	var tmp = [];
	if (s < 1) {
		return tmp;
	}
	while (1) {
		var i = parseInt(Math.random() * max, 10);
		if (tmp.join(",").match(this[i]) == null) {
			tmp.push(this[i]);
			if (tmp.length == s) {
				return tmp;
			}
		}
	}
};

var Loto6 = (function() {

	var version = '1.0.2';

	var NUMS = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '40', '41', '42', '43'];

	var val = [];

	var no_jquery = false;


	if (!jQuery) {
		no_jquery = true;
		alert('jQueryライブラリがないため一部の機能が利用できません。');
	}

	return {
		version: function() {
			return version;
		},

		val: function() {
			return val;
		},

		get: function(b) {
			var nums = [];
			if (b == true) {
				nums.push(NUMS.rand(6).sort());
				var max = NUMS.length;
				for (var i = 0; i < 37; i++) {
					var k = parseInt(Math.random() * max, 10);
					if (nums[0].join(",").match(NUMS[k]) == null) {
						nums.push(NUMS[k]);
						break;
					}
				}
			} else {
				nums = NUMS.rand(6).sort();
			}
			return nums;
		},

		//2つの配列の一致する要素の数を返す
		compare : function (a, b){
			var same = 0;
			if (!a.length  || !b.length) {
				return same;
			}
			var temp = b.join(",");
			for (var i in a) {
				if (temp.match(a[i])) {
					same++;
				}
			}
			return same;
		},

		//2つの配列の一致する要素を返す
		intersect : function (a, b){
			var array = [];
			if (!a.length  || !b.length) {
				return array;
			}
			var temp = b.join(",");
			for (var i in a) {
				if (temp.match(a[i])) {
					array.push(a[i]);
				}
			}
			return array;
		},

		//2つの配列の異なる要素を返す
		diff : function (a, b){
			var array = [];
			if (!a.length  || !b.length) {
				return array;
			}
			var temp = b.join(",");
			for (var i in a) {
				if (!temp.match(a[i])) {
					array.push(a[i]);
				}
			}
			return array;
		},

		Xto6 : function (list, condition){
			var rand = false;
			if (typeof list == 'number') {
				list = NUMS.rand(list);
			} else if (list == undefined) {
				list = NUMS;
			}
			if (!list instanceof Array) {
				return false
			}

			var length = list.length;

			if (length < 6) {
				return false;
			}
			var array = [];
			var a,b,c,d,e,f;
			a = 0;
			while (a < length - 5) {
				b = a + 1;
				while (b < length - 4) {
					c = b + 1;
					while (c < length - 3) {
						d = c + 1;
						while (d < length - 2) {
							e = d + 1;
							while (e < length - 1) {
								f = e + 1;
								while (f < length) {
									var flag = true;
									var nums = [list[a], list[b], list[c], list[d], list[e], list[f]];
									if (condition) {
										flag = condition(nums);
									}
									if (flag) {
										array.push(nums);
									}
									f++;
								}
								e++;
							}
							d++;
						}
						c++;
					}
					b++;
				}
				a++;
			}
			return array;
		},

		pandora: function(option, callback) {
			if (!no_jquery) {
				return false;
			}
			if (!callback) {
				return false;
			}
			var nums = [];
			var url = 'http://www.dreamkit.info/tools/pandora.html?mode=';
			if (typeof option == 'number') {
				url += option;
			} else {
				url += option.count;
				if (option.type) {
					url += '&type=' + option.type;
				}
			}
			url += '&callback=?';

			jQuery.getJSON(url, function (data) {
					for (var i in data) {
						nums.push(data[i]);
					}
					callback(nums);
			});
		},

		getResult: function() {
			return false;
		}

	}

})();
