基础版本
diff --git a/www/js/lib/aui-popup.js b/www/js/lib/aui-popup.js
new file mode 100644
index 0000000..fe26259
--- /dev/null
+++ b/www/js/lib/aui-popup.js
@@ -0,0 +1,94 @@
+/**
+ * aui-popup.js
+ * @author 流浪男
+ * @todo more things to abstract, e.g. Loading css etc.
+ * Licensed under the MIT license.
+ * http://www.opensource.org/licenses/mit-license.php
+ */
+(function( window, undefined ) {
+    "use strict";
+    var auiPopup = function() {
+        this._init();
+    };
+    var	CLASS_MASK = "aui-mask",
+    	CLASS_MASK_IN = 'aui-mask-in',
+    	CLASS_MASK_OUT = 'aui-mask-out',
+        CLASS_POPUP = 'aui-popup',
+    	CLASS_POPUP_IN = 'aui-popup-in',
+    	CLASS_POPUP_OUT = 'aui-popup-out',
+    	CLASS_POPUP_FOR = 'aui-popup-for';
+    var	__MASK = '.'+CLASS_MASK,
+    	__MASK_IN = '.'+CLASS_MASK_IN,
+    	__MASK_OUT = '.'+CLASS_MASK_OUT,
+        __POPUP = '.'+CLASS_POPUP,
+    	__POPUP_IN = '.'+CLASS_POPUP_IN,
+    	__POPUP_OUT = '.'+CLASS_POPUP_OUT;
+    var popupStatus = false;
+    auiPopup.prototype = {
+        _init: function() {
+        	var self = this;
+        	var _btn = document.querySelectorAll("["+CLASS_POPUP_FOR+"]");
+        	if(_btn){
+        		for(var i=0;i<_btn.length;i++){
+        			_btn[i].setAttribute("tapmode", "");
+        			_btn[i].onclick = function(e){
+        				var popupId = this.getAttribute(CLASS_POPUP_FOR);
+        				var popupDom = document.getElementById(popupId);
+        				if(popupDom){
+							if(popupDom.className.indexOf(CLASS_POPUP_IN) > -1 || document.querySelector(__POPUP_IN)){
+					            self.hide(popupDom);
+					        }else{
+					        	self.show(popupDom);
+					        }
+        				}else{
+        					return;
+        				}
+					}
+        		}
+        	}
+        },
+        show: function(el){
+        	var self = this;
+        	if(el.className.indexOf(CLASS_POPUP_IN) > -1 || document.querySelector(__POPUP_IN)){
+	            self.hide(el);
+	            return;
+	        }
+            if(popupStatus) return;
+        	if(!document.querySelector(__MASK)){
+				var maskHtml = '<div class="aui-mask"></div>';
+				document.body.insertAdjacentHTML('beforeend', maskHtml);
+			}
+        	el.style.display = "block";
+        	setTimeout(function(){
+        		document.querySelector(__MASK).classList.add(CLASS_MASK_IN);
+	            el.classList.add(CLASS_POPUP_IN);
+                popupStatus = true;
+	        }, 10)
+	        document.querySelector(__MASK).addEventListener("touchstart", function(event){
+	        	event.preventDefault();
+	        	self.hide(el);
+	        })
+            el.addEventListener("touchmove", function(event){
+                event.preventDefault();
+            },false)
+        },
+        hide: function(el){
+            if(!popupStatus) return;
+        	document.querySelector(__MASK).classList.remove(CLASS_MASK_IN);
+        	document.querySelector(__MASK).classList.add(CLASS_MASK_OUT);
+        	if(!document.querySelector(__POPUP_IN))return;
+            document.querySelector(__POPUP_IN).classList.add(CLASS_POPUP_OUT);
+            document.querySelector(__POPUP_IN).classList.remove(CLASS_POPUP_IN);
+	        setTimeout(function(){
+                if(!document.querySelector(__POPUP_OUT))return;
+	        	document.querySelector(__POPUP_OUT).style.display = "none";
+	            document.querySelector(__POPUP_OUT).classList.remove(CLASS_POPUP_OUT);
+	            if(document.querySelector(__MASK)){
+					document.querySelector(__MASK).parentNode.removeChild(document.querySelector(__MASK));
+				}
+                popupStatus = false;
+	        }, 300)
+        }
+    };
+	window.auiPopup = auiPopup;
+})(window);
\ No newline at end of file