/**

 * ai是一个提供基础常用函数的单体。各个函数的功能见各个函数的注释。

 * @version 3.0.1

 */

var ai = {

	

	touchClick: function(obj, fun) {

		/**

		* 该方法用于绑定点击事件,比一般的click事件反应速度快2倍。

		* @param {对象字面量} obj 要绑定的dom对象

		* @param {对象字面量} fun 事件触发的函数

		*/

		var start_x = 0,

			start_y = 0;

		obj.addEventListener('touchstart',function(e){

			start_x = e.touches[0].clientX;

			start_y = e.touches[0].clientY;

			document.addEventListener('touchend', touEnd, false);

		});

		function touEnd(e){

			var endX = e.changedTouches[0].clientX;

			var endY = e.changedTouches[0].clientY;

			if(Math.abs(endX - start_x) < 5 && Math.abs(endY - start_y) < 5) {

				fun.call(obj,e);

			}

			document.removeEventListener('touchend', touEnd, false);

		};

	},

	ovb: {

		/**

		* 该对象用于判断系统,系统版本,浏览器,苹果设备等等功能。ovb是单词 Os Version Browser 的头字母缩写。

		*/

		_version_value: false,

		_bversion_value: false,

		_ua: navigator.userAgent,

		android: function() {

			/**

			* 该方法用于判断是否为安卓平台,如果是返回ture 否 返回 false

			* @author 黄浩明

			* @return ture或者false

			*/	

			var regular_result = this._ua.match(/(Android)\s+([\d.]+)/),

				os_boolean = !!regular_result;

			if(!this._version_value && os_boolean){

				this._version_value = regular_result[2];

			}

			this.android = function(){return os_boolean;};

			return os_boolean;

		},

		ios: function() {

			/**

			* 该方法用于判断是否为iOS平台,如果是返回ture 否 返回 false

			* @return ture或者false

			*/	

			var regular_result = this._ua.match(/.*OS\s([\d_]+)/),

				os_boolean = !!regular_result;

			if(!this._version_value && os_boolean){

				this._version_value = regular_result[1].replace(/_/g, '.');

			}

			this.ios = function(){return os_boolean;};

			return os_boolean;

		},

		ipod: function() {

			/**

			* 该方法用于判断是否为ipod设备,如果是返回ture 否 返回 false

			* @return ture或者false

			*/	

			var regular_result = this._ua.match(/(iPod).*OS\s([\d_]+)/),

				os_boolean = !!regular_result;

			if(!this._version_value && os_boolean){

				this._version_value = regular_result[2].replace(/_/g, '.');

			}

			this.ipod = function(){return os_boolean;};

			return os_boolean;

		},

		ipad: function() {

			/**

			* 该方法用于判断是否为ipad设备,如果是返回ture 否 返回 false

			* @return ture或者false

			*/

			var regular_result = this._ua.match(/(iPad).*OS\s([\d_]+)/),

				os_boolean = !!regular_result; 

			if(!this._version_value && os_boolean){

				this._version_value = regular_result[2].replace(/_/g, '.');

			}

			this.ipad = function(){return os_boolean;};

			return os_boolean;

		},

		iphone: function() {

			/**

			* 该方法用于判断是否为iphone设备,如果是返回ture 否 返回 false

			* @return ture或者false

			*/

			var regular_result = this._ua.match(/(iPhone);.*OS\s([\d_]+)/),

				os_boolean = !!regular_result;

			if(!this._version_value && os_boolean){

				this._version_value = regular_result[2].replace(/_/g, '.');

			}

			this.iphone = function(){return os_boolean;};

			return os_boolean;

		},

		kindle: function() {

			/**

			* 该方法用于判断是否为kindle设备,如果是返回ture 否 返回 false

			* @return ture或者false

			*/

			var regular_result = this._ua.match(/Kindle\/([\d.]+)/),

				os_boolean = !!regular_result;

			if(!this._version_value && os_boolean){

				this._version_value = regular_result[1];

			}

			this.kindle = function(){return os_boolean;};

			return os_boolean;

		},

		webkit: function() {

			/**

			* 该方法用于判断是否为webkit内核的浏览器,如果是返回ture 否 返回 false

			* @return ture或者false

			*/

			var regular_result = this._ua.match(/WebKit\/([\d.]+)/),

				os_boolean = !!regular_result;

			if(!this._version_value && os_boolean){

				this._bversion_value = regular_result[1];

			}

			this.webkit = function(){return os_boolean;};

			return os_boolean;

		},

		uc: function() {

			/**

			* 该方法用于判断是否为UC内核的浏览器,如果是返回ture 否 返回 false

			* @return ture或者false

			* @tip    该函数只在安卓平台能正常判断,慎用!

			*/

			var regular_result = this._ua.match(/UC/),

				os_boolean = !!regular_result;

			this.uc = function(){return os_boolean;};

			return os_boolean;

		},

		opera: function() {

			/**

			* 该方法用于判断是否为opera浏览器,如果是返回ture 否 返回 false

			* @return ture或者false

			*/

			var regular_result = this._ua.match(/Opera/),

				os_boolean = !!regular_result;

			this.opera = function(){return os_boolean;};

			return os_boolean;

		},

		safari: function() {

			/**

			* 该方法用于判断是否为safari浏览器,如果是返回ture 否 返回 false

			* @return ture或者false

			* @tip    该函数在一些不知名的浏览器如遨游之类上不能正常判断

			*/

			var regular_result = this._ua.match(/Version.*Safari/),

				os_boolean = !!regular_result;

			this.safari = function(){return os_boolean;};

			return os_boolean;

		},

		silk: function() {

			/**

			* 该方法用于判断是否为silk浏览器,如果是返回ture 否 返回 false

			* @return ture或者false

			*/

			var regular_result = this._ua.match(/Silk/),

				os_boolean = !!regular_result;

			this.silk = function(){return os_boolean;};

			return os_boolean;

		},

		version: function() {

			/**

			* 该方法返回系统的版本

			* @return 系统版本号例如 5.5.1

			*/

			return this._version_value;

		},

		bVersion: function() {

			/**

			* 该方法返回webkit浏览器的版本

			* @return 系统版本号例如 5.5.1

			*/

			return this._bversion_value;

		}

	},

	a: function(s) {

		return document.querySelectorAll(s);

	},

	q: function(s) {

		return document.querySelector(s); 

	},

	i: function(id) {

		return document.getElementById(id);

	},

	c: function(klass) {

		return document.getElementsByClassName(klass);

	},

	hideUrl: function() {

		/**

		* 该方法用于在ios上隐藏导航条

		*/

		//setTimeout(scrollTo,0,0,0);

		setTimeout(function() {

                window.scrollTo(0, 1);

				

            },

            200)

	},

	wh: function() {

		/**

		* 该方法用于取得可视区域的高度

		* @return 可视区域的高度

		*/	

		return document.documentElement.clientHeight;

	},

	ww: function() {

		/**

		* 该方法用于取得可视区域的宽

		* @return 可视区域的宽

		*/	

		return document.documentElement.clientWidth;

	},

	hv: function() {

		/**

		* 该方法用于判断当前状态时横屏还是竖屏

		* @return 如果为竖屏返回否则返回false

		*/

		if(this.wh()/this.ww()>1){

			return true;

		}else{

			return false;

		}

	},

	resize: function(fun) {

		/**

		* 该方法用于绑定手机横屏竖屏的动作,之所以写了那么多代码,是因为该动作在安卓上会在转屏的时候出发2次,所以将间隔小于200秒的去掉。

		* @param {函数} 事件触发时要执行的函数。

		*/

		//var resize = 'onorientationchange' in window ? 'orientationchange' : 'resize';

		this.resize_time = Date.now();

		window.addEventListener('resize', function(){

			if(Date.now() - this.resize_time < 200 ){

				this.resize_time = Date.now();

			}else{

				fun();

				this.resize_time = Date.now();

			}

		}, false);

		

	},

	clone: function(object) {

		/**

	   * 该方法用于原型式继承

	   * @param {对象字面量} object 父对象

        * @return 返回一个继承了 object 的对象

	   */

		function f() {}

		f.prototype = object;

		return new f;

	},

	extend: function(subClass, superClass) {

		/**

		* 该方法用于类式继承

		* @param {对象字面量} subClass 子对象

		* @param {对象字面量} superClass 父对象

		*/	

		var f = function() {};

		f.prototype = superClass.prototype;

		subClass.prototype = new f();

		subClass.prototype.constructor = subClass;

		subClass.superclass = superClass.prototype;

		if(superClass.prototype.constructor == Object.prototype.constructor) {

			superClass.prototype.constructor = superClass;

		}

	},

	styleLoad: function(url,fun) {

		/**

		* 该方法用于动态加载css文件

		* @param {对象字面量} url 目标style文件的url

		* @param {对象字面量} fun style文件载入后执行的函数

		*/	

		var A = document.createElement("style");

		A.type = "text/css";

		A.src = url;

		document.head.appendChild(A)

		A.onload = function(){fun()};

	},

	scriptLoad: function(url,fun) {

		/**

		* 该方法用于动态加载js文件

		* @param {对象字面量} url 目标js文件的url

		* @param {对象字面量} fun js文件载入后执行的函数

		*/	

		var A = document.createElement("script");

		A.type = "text/javascript";

		A.src = url;

		document.head.appendChild(A);

		A.onload = function(){fun()};

	},

	touchMovePreventDefault: function(obj) {

		/**

		* 该方法用于取消目标DOM上touchMove的默认事件

		* @param {DOM对象}obj 目标DOM

		*/	

		obj.addEventListener("touchmove", function(e) {

			e.preventDefault();

		}, false);

	}

	

}