text: /*
   * APICloud JavaScript Library
   * Copyright (c) 2014 apicloud.com
   */
  (function(window){
      var u = {};
      var isAndroid = (/android/gi).test(navigator.appVersion);
      var uzStorage = function(){
          var ls = window.localStorage;
          if(isAndroid){
             ls = os.localStorage();
          }
          return ls;
      };
      function parseArguments(url, data, fnSuc, dataType) {
          if (typeof(data) == 'function') {
              dataType = fnSuc;
              fnSuc = data;
              data = undefined;
          }
          if (typeof(fnSuc) != 'function') {
              dataType = fnSuc;
              fnSuc = undefined;
          }
          return {
              url: url,
              data: data,
              fnSuc: fnSuc,
              dataType: dataType
          };
      }
      u.trim = function(str){
          if(String.prototype.trim){
              return str == null ? "" : String.prototype.trim.call(str);
          }else{
              return str.replace(/(^\s*)|(\s*$)/g, "");
          }
      };
      u.trimAll = function(str){
          return str.replace(/\s*/g,'');
      };
      u.isElement = function(obj){
          return !!(obj && obj.nodeType == 1);
      };
      u.isArray = function(obj){
          if(Array.isArray){
              return Array.isArray(obj);
          }else{
              return obj instanceof Array;
          }
      };
      u.isEmptyObject = function(obj){
          if(JSON.stringify(obj) === '{}'){
              return true;
          }
          return false;
      };
      u.addEvt = function(el, name, fn, useCapture){
          if(!u.isElement(el)){
              console.warn('$api.addEvt Function need el param, el param must be DOM Element');
              return;
          }
          useCapture = useCapture || false;
          if(el.addEventListener) {
              el.addEventListener(name, fn, useCapture);
          }
      };
      u.rmEvt = function(el, name, fn, useCapture){
          if(!u.isElement(el)){
              console.warn('$api.rmEvt Function need el param, el param must be DOM Element');
              return;
          }
          useCapture = useCapture || false;
          if (el.removeEventListener) {
              el.removeEventListener(name, fn, useCapture);
          }
      };
      u.one = function(el, name, fn, useCapture){
          if(!u.isElement(el)){
              console.warn('$api.one Function need el param, el param must be DOM Element');
              return;
          }
          useCapture = useCapture || false;
          var that = this;
          var cb = function(){
              fn && fn();
              that.rmEvt(el, name, cb, useCapture);
          };
          that.addEvt(el, name, cb, useCapture);
      };
      u.dom = function(el, selector){
          if(arguments.length === 1 && typeof arguments[0] == 'string'){
              if(document.querySelector){
                  return document.querySelector(arguments[0]);
              }
          }else if(arguments.length === 2){
              if(el.querySelector){
                  return el.querySelector(selector);
              }
          }
      };
      u.domAll = function(el, selector){
          if(arguments.length === 1 && typeof arguments[0] == 'string'){
              if(document.querySelectorAll){
                  return document.querySelectorAll(arguments[0]);
              }
          }else if(arguments.length === 2){
              if(el.querySelectorAll){
                  return el.querySelectorAll(selector);
              }
          }
      };
      u.byId = function(id){
          return document.getElementById(id);
      };
      u.first = function(el, selector){
          if(arguments.length === 1){
              if(!u.isElement(el)){
                  console.warn('$api.first Function need el param, el param must be DOM Element');
                  return;
              }
              return el.children[0];
          }
          if(arguments.length === 2){
              return this.dom(el, selector+':first-child');
          }
      };
      u.last = function(el, selector){
          if(arguments.length === 1){
              if(!u.isElement(el)){
                  console.warn('$api.last Function need el param, el param must be DOM Element');
                  return;
              }
              var children = el.children;
              return children[children.length - 1];
          }
          if(arguments.length === 2){
              return this.dom(el, selector+':last-child');
          }
      };
      u.eq = function(el, index){
          return this.dom(el, ':nth-child('+ index +')');
      };
      u.not = function(el, selector){
          return this.domAll(el, ':not('+ selector +')');
      };
      u.prev = function(el){
          if(!u.isElement(el)){
              console.warn('$api.prev Function need el param, el param must be DOM Element');
              return;
          }
          var node = el.previousSibling;
          if(node.nodeType && node.nodeType === 3){
              node = node.previousSibling;
              return node;
          }
      };
      u.next = function(el){
          if(!u.isElement(el)){
              console.warn('$api.next Function need el param, el param must be DOM Element');
              return;
          }
          var node = el.nextSibling;
          if(node.nodeType && node.nodeType === 3){
              node = node.nextSibling;
              return node;
          }
      };
      u.closest = function(el, selector){
          if(!u.isElement(el)){
              console.warn('$api.closest Function need el param, el param must be DOM Element');
              return;
          }
          var doms, targetDom;
          var isSame = function(doms, el){
              var i = 0, len = doms.length;
              for(i; i<len; i++){
                  if(doms[i].isEqualNode(el)){
                      return doms[i];
                  }
              }
              return false;
          };
          var traversal = function(el, selector){
              doms = u.domAll(el.parentNode, selector);
              targetDom = isSame(doms, el);
              while(!targetDom){
                  el = el.parentNode;
                  if(el != null && el.nodeType == el.DOCUMENT_NODE){
                      return false;
                  }
                  traversal(el, selector);
              }
  
              return targetDom;
          };
  
          return traversal(el, selector);
      };
      u.contains = function(parent,el){
          var mark = false;
          if(el === parent){
              mark = true;
              return mark;
          }else{
              do{
                  el = el.parentNode;
                  if(el === parent){
                      mark = true;
                      return mark;
                  }
              }while(el === document.body || el === document.documentElement);
  
              return mark;
          }
          
      };
      u.remove = function(el){
          if(el && el.parentNode){
              el.parentNode.removeChild(el);
          }
      };
      u.attr = function(el, name, value){
          if(!u.isElement(el)){
              console.warn('$api.attr Function need el param, el param must be DOM Element');
              return;
          }
          if(arguments.length == 2){
              return el.getAttribute(name);
          }else if(arguments.length == 3){
              el.setAttribute(name, value);
              return el;
          }
      };
      u.removeAttr = function(el, name){
          if(!u.isElement(el)){
              console.warn('$api.removeAttr Function need el param, el param must be DOM Element');
              return;
          }
          if(arguments.length === 2){
              el.removeAttribute(name);
          }
      };
      u.hasCls = function(el, cls){
          if(!u.isElement(el)){
              console.warn('$api.hasCls Function need el param, el param must be DOM Element');
              return;
          }
          if(el.className.indexOf(cls) > -1){
              return true;
          }else{
              return false;
          }
      };
      u.addCls = function(el, cls){
          if(!u.isElement(el)){
              console.warn('$api.addCls Function need el param, el param must be DOM Element');
              return;
          }
          if('classList' in el){
              el.classList.add(cls);
          }else{
              var preCls = el.className;
              var newCls = preCls +' '+ cls;
              el.className = newCls;
          }
          return el;
      };
      u.removeCls = function(el, cls){
          if(!u.isElement(el)){
              console.warn('$api.removeCls Function need el param, el param must be DOM Element');
              return;
          }
          if('classList' in el){
              el.classList.remove(cls);
          }else{
              var preCls = el.className;
              var newCls = preCls.replace(cls, '');
              el.className = newCls;
          }
          return el;
      };
      u.toggleCls = function(el, cls){
          if(!u.isElement(el)){
              console.warn('$api.toggleCls Function need el param, el param must be DOM Element');
              return;
          }
         if('classList' in el){
              el.classList.toggle(cls);
          }else{
              if(u.hasCls(el, cls)){
                  u.removeCls(el, cls);
              }else{
                  u.addCls(el, cls);
              }
          }
          return el;
      };
      u.val = function(el, val){
          if(!u.isElement(el)){
              console.warn('$api.val Function need el param, el param must be DOM Element');
              return;
          }
          if(arguments.length === 1){
              switch(el.tagName){
                  case 'SELECT':
                      var value = el.options[el.selectedIndex].value;
                      return value;
                      break;
                  case 'INPUT':
                      return el.value;
                      break;
                  case 'TEXTAREA':
                      return el.value;
                      break;
              }
          }
          if(arguments.length === 2){
              switch(el.tagName){
                  case 'SELECT':
                      el.options[el.selectedIndex].value = val;
                      return el;
                      break;
                  case 'INPUT':
                      el.value = val;
                      return el;
                      break;
                  case 'TEXTAREA':
                      el.value = val;
                      return el;
                      break;
              }
          }
          
      };
      u.prepend = function(el, html){
          if(!u.isElement(el)){
              console.warn('$api.prepend Function need el param, el param must be DOM Element');
              return;
          }
          el.insertAdjacentHTML('afterbegin', html);
          return el;
      };
      u.append = function(el, html){
          if(!u.isElement(el)){
              console.warn('$api.append Function need el param, el param must be DOM Element');
              return;
          }
          el.insertAdjacentHTML('beforeend', html);
          return el;
      };
      u.before = function(el, html){
          if(!u.isElement(el)){
              console.warn('$api.before Function need el param, el param must be DOM Element');
              return;
          }
          el.insertAdjacentHTML('beforebegin', html);
          return el;
      };
      u.after = function(el, html){
          if(!u.isElement(el)){
              console.warn('$api.after Function need el param, el param must be DOM Element');
              return;
          }
          el.insertAdjacentHTML('afterend', html);
          return el;
      };
      u.html = function(el, html){
          if(!u.isElement(el)){
              console.warn('$api.html Function need el param, el param must be DOM Element');
              return;
          }
          if(arguments.length === 1){
              return el.innerHTML;
          }else if(arguments.length === 2){
              el.innerHTML = html;
              return el;
          }
      };
      u.text = function(el, txt){
          if(!u.isElement(el)){
              console.warn('$api.text Function need el param, el param must be DOM Element');
              return;
          }
          if(arguments.length === 1){
              return el.textContent;
          }else if(arguments.length === 2){
              el.textContent = txt;
              return el;
          }
      };
      u.offset = function(el){
          if(!u.isElement(el)){
              console.warn('$api.offset Function need el param, el param must be DOM Element');
              return;
          }
          var sl = Math.max(document.documentElement.scrollLeft, document.body.scrollLeft);
          var st = Math.max(document.documentElement.scrollTop, document.body.scrollTop);
  
          var rect = el.getBoundingClientRect();
          return {
              l: rect.left + sl,
              t: rect.top + st,
              w: el.offsetWidth,
              h: el.offsetHeight
          };
      };
      u.css = function(el, css){
          if(!u.isElement(el)){
              console.warn('$api.css Function need el param, el param must be DOM Element');
              return;
          }
          if(typeof css == 'string' && css.indexOf(':') > 0){
              el.style && (el.style.cssText += ';' + css);
          }
      };
      u.cssVal = function(el, prop){
          if(!u.isElement(el)){
              console.warn('$api.cssVal Function need el param, el param must be DOM Element');
              return;
          }
          if(arguments.length === 2){
              var computedStyle = window.getComputedStyle(el, null);
              return computedStyle.getPropertyValue(prop);
          }
      };
      u.jsonToStr = function(json){
          if(typeof json === 'object'){
              return JSON && JSON.stringify(json);
          }
      };
      u.strToJson = function(str){
          if(typeof str === 'string'){
              return JSON && JSON.parse(str);
          }
      };
      u.setStorage = function(key, value){
          if(arguments.length === 2){
              var v = value;
              if(typeof v == 'object'){
                  v = JSON.stringify(v);
                  v = 'obj-'+ v;
              }else{
                  v = 'str-'+ v;
              }
              var ls = uzStorage();
              if(ls){
                  ls.setItem(key, v);
              }
          }
      };
      u.getStorage = function(key){
          var ls = uzStorage();
          if(ls){
              var v = ls.getItem(key);
              if(!v){return;}
              if(v.indexOf('obj-') === 0){
                  v = v.slice(4);
                  return JSON.parse(v);
              }else if(v.indexOf('str-') === 0){
                  return v.slice(4);
              }
          }
      };
      u.rmStorage = function(key){
          var ls = uzStorage();
          if(ls && key){
              ls.removeItem(key);
          }
      };
      u.clearStorage = function(){
          var ls = uzStorage();
          if(ls){
              ls.clear();
          }
      };
  
     
      /*by king*/
      u.fixIos7Bar = function(el){
          if(!u.isElement(el)){
              console.warn('$api.fixIos7Bar Function need el param, el param must be DOM Element');
              return;
          }
          var strDM = api.systemType;
          if (strDM == 'ios') {
              var strSV = api.systemVersion;
              var numSV = parseInt(strSV,10);
              var fullScreen = api.fullScreen;
              var iOS7StatusBarAppearance = api.iOS7StatusBarAppearance;
              if (numSV >= 7 && !fullScreen && iOS7StatusBarAppearance) {
                  el.style.paddingTop = '20px';
              }
          }
      };
      u.fixStatusBar = function(el){
          if(!u.isElement(el)){
              console.warn('$api.fixStatusBar Function need el param, el param must be DOM Element');
              return;
          }
          var sysType = api.systemType;
          if(sysType == 'ios'){
              u.fixIos7Bar(el);
          }else if(sysType == 'android'){
              var ver = api.systemVersion;
              ver = parseFloat(ver);
              if(ver >= 4.4){
                  el.style.paddingTop = '25px';
              }
          }
      };
      u.toast = function(title, text, time){
          var opts = {};
          var show = function(opts, time){
              api.showProgress(opts);
              setTimeout(function(){
                  api.hideProgress();
              },time);
          };
          if(arguments.length === 1){
              var time = time || 500;
              if(typeof title === 'number'){
                  time = title;
              }else{
                  opts.title = title+'';
              }
              show(opts, time);
          }else if(arguments.length === 2){
              var time = time || 500;
              var text = text;
              if(typeof text === "number"){
                  var tmp = text;
                  time = tmp;
                  text = null;
              }
              if(title){
                  opts.title = title;
              }
              if(text){
                  opts.text = text;
              }
              show(opts, time);
          }
          if(title){
              opts.title = title;
          }
          if(text){
              opts.text = text;
          }
          time = time || 500;
          show(opts, time);
      };
      u.post = function(/*url,data,fnSuc,dataType*/){
          var argsToJson = parseArguments.apply(null, arguments);
          var json = {};
          var fnSuc = argsToJson.fnSuc;
          argsToJson.url && (json.url = argsToJson.url);
          argsToJson.data && (json.data = argsToJson.data);
          if(argsToJson.dataType){
              var type = argsToJson.dataType.toLowerCase();
              if (type == 'text'||type == 'json') {
                  json.dataType = type;
              }
          }else{
              json.dataType = 'json';
          }
          json.method = 'post';
          api.ajax(json,
              function(ret,err){
                  if (ret) {
                      fnSuc && fnSuc(ret);
                  }
              }
          );
      };
      u.get = function(/*url,fnSuc,dataType*/){
          var argsToJson = parseArguments.apply(null, arguments);
          var json = {};
          var fnSuc = argsToJson.fnSuc;
          argsToJson.url && (json.url = argsToJson.url);
          //argsToJson.data && (json.data = argsToJson.data);
          if(argsToJson.dataType){
              var type = argsToJson.dataType.toLowerCase();
              if (type == 'text'||type == 'json') {
                  json.dataType = type;
              }
          }else{
              json.dataType = 'text';
          }
          json.method = 'get';
          api.ajax(json,
              function(ret,err){
                  if (ret) {
                      fnSuc && fnSuc(ret);
                  }
              }
          );
      };
  
  /*end*/
      
  
      window.$api = u;
  
  })(window);
  
  
  