// julib V1.0 我爱七月 174581928 JULCMS.COM
(function(){
  var JUL = window.JUL = new Object();
  
  JUL.ROOT = function(){
    var elements = JUL.find("script");
    for(var i = 0,len = elements.length; i < len; i++){
      if (elements[i].src && elements[i].src.match(/jullib[\w\-\.]*\.js/)){
        return elements[i].src.substring(0, elements[i].src.lastIndexOf('/') + 1);
      }
    }
    return "/";
  };
  JUL.find = function(par1,par2){
    /*语法：
     *基本：#id | .class | * | tag | *tag
     *属性：基本[attr] | 基本[attr=val] | 基本[attr!=val]
     *层级：基本(属性)>基本(属性)
     *例：JUL.find(#id>.class>tag[attr=val]);
     **/
    var regId = /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/;
    var regCss = /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/;
    var regTag = /\*((?:[\w\u00c0-\uFFFF\-]|\\.)+)/;
    var regTAG = /((?:[\w\u00c0-\uFFFF\-]|\\.)+)/;
    var regAttr = /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/;
    if(typeof(par1) === "string"){
      return JUL.find([document], par1);
    }else if(par1.nodeType === 1){
      return [par1];
    }else if(JUL.isArray(par1)){
      var items,selector=par1,contexts=[],doms,regs;
      var i,j,k;
      for(i in items = par2.split(">")){
        switch(items[i].charAt(0)){
          case "#":
            contexts.push(document.getElementById(regId.exec(items[i])[1]));
            break;
          case ".":
            for(j in selector){
              for(k in doms = selector[j].getElementsByTagName("*")){
                if(doms[k].className && doms[k].nodeType === 1){
                  if(doms[k].className.match(regCss.exec(items[i])[1])){
                    regs = regAttr.exec(items[i]);
                    if(regs){
                      switch(regs[2]){
                        case "=":
                          if(doms[k].getAttribute(regs[1]).match(regs[4])) contexts.push(doms[k]);
                          break;
                        case "!=":
                          if(!doms[k].getAttribute(regs[1]).match(regs[4])) contexts.push(doms[k]);
                          break;
                        default:
                          if(doms[k].getAttribute(regs[1])) contexts.push(doms[k]);
                      }
                    }else{
                      contexts.push(doms[k]);
                    }
                  }
                }
              }
            }
            break;
          case "*":
            regs = regTag.exec(items[i]);
            if(regs){
              doms = document.createElement(regs[1]);
              if(selector[0].nodeType !== 1){
                document.body.appendChild(doms);
              }else{
                selector[0].appendChild(doms);
              }
              contexts.push(doms);
            }else{
              for(j in selector){
                for(k in doms = selector[j].getElementsByTagName("*")){
                  if(doms[k].nodeType === 1){
                    regs  = regAttr.exec(items[i]);
                    if(regs){
                      switch(regs[2]){
                        case "=":
                          if(!doms[k].getAttribute(regs[1])) break;
                          if(doms[k].getAttribute(regs[1]).match(regs[4])) contexts.push(doms[k]);
                          break;
                        case "!=":
                          if(!doms[k].getAttribute(regs[1])) break;
                          if(!doms[k].getAttribute(regs[1]).match(regs[4])) contexts.push(doms[k]);
                          break;
                        default:
                          if(doms[k].getAttribute(regs[1])) contexts.push(doms[k]);
                      }
                    }else{
                      contexts.push(doms[k]);
                    }
                  }
                }
              }
            }
            break;
          default :
            for(j in selector){
              for(k in doms = selector[j].getElementsByTagName(regTAG.exec(items[i])[0])){
                if(doms[k].nodeType === 1){
                  regs  = regAttr.exec(items[i]);
                  if(regs){
                    switch(regs[2]){
                      case "=":
                        if(!doms[k].getAttribute(regs[1])) break;
                        if(doms[k].getAttribute(regs[1]).match(regs[4])) contexts.push(doms[k]);
                        break;
                      case "!=":
                        if(!doms[k].getAttribute(regs[1])) break;
                        if(!doms[k].getAttribute(regs[1]).match(regs[4])) contexts.push(doms[k]);
                        break;
                      default:
                        if(doms[k].getAttribute(regs[1])) contexts.push(doms[k]);
                    }
                  }else{
                    contexts.push(doms[k]);
                  }
                }
              }
            }
        }
        selector = contexts;
        contexts = [];
      }
      return selector;
    }else{
      return [];
    }
  };
  JUL.each = function(Arrs,callback){for(var i=0;i<Arrs.length;i++){callback.call(this,Arrs[i]);}};
  JUL.ajax = function(options){
    this.options = options || {};
    this.type      = this.options.type      || "post";
    this.url       = this.options.url       || false;
    this.async     = this.options.async     || true;
    this.sendData  = this.options.sendData  || "";
    this.dataType  = this.options.dataType  || "txt"; //txt | xml | js
    this.onWait    = this.options.onWait    || function(){};
    this.onSuccess = this.options.onSuccess || function(){};
    this.onError   = this.options.onError   || function(){};
    this.xmlhttp = null;
    this.createXmlhttp = function(){
      if(window.XMLHttpRequest){
        return new XMLHttpRequest();
      }else if(window.ActiveXObject){
        return new ActiveXObject("Microsoft.XMLHTTP");
      }else{
        return new Msxml2.XMLHTTP();
      }
    };
    this.stateChange = function(){
      var that = this;
      that.xmlhttp.onreadystatechange = function(){
        if(that.xmlhttp.readyState == 4){
          if(that.xmlhttp.status == 200){
            if(that.dataType == "txt"){
              that.onSuccess(that.xmlhttp.responseText);
            }else if(that.dataType == "xml"){
              that.onSuccess(that.xmlhttp.responseXML);
            }else if(that.dataType == "js"){
              eval.call(window,that.xmlhttp.responseText);
            }else{
              that.onError();
            }
          }else{
            that.onWait();
          }
        }else{
          that.onWait();
        }
      }
    };
    this.send = function(){
      if(!(this.xmlhttp = this.createXmlhttp())) return;
      this.stateChange();
      this.xmlhttp.open(this.type,this.url,this.async);
      this.xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
      this.xmlhttp.setRequestHeader('If-Modified-Since','0');
      this.xmlhttp.send(this.sendData);
    };
    if(options) this.send();
  };
  JUL.isArray = function(obj){return Object.prototype.toString.call(obj) === "[object Array]";};
  JUL.isCss = function(el,classname){return el.className.match(new RegExp("(^|\\s)"+classname+"(\\s|$)","g")) == null ? false : true;};
  JUL.Attr = function(el,name,val){
    if(el == undefined || el.nodeType != 1 || name == undefined || val == undefined) return;
    if(document.all && name == "class") name ="className";
    el.setAttribute(name,val);
  };
  JUL.Attrs = function(el,pros){for(var i in pros){el.setAttribute(i,pros[i]);}};
  JUL.removeAttr = function(el,name){
    if(typeof(name) == "string"){
      if(document.all && name == "class") name = "className";
      el.removeAttribute(name);
    }else if(JUL.isArray(name)){
      for(var i=0; i<name.length; i++){
        if(document.all && name[i] == "class") name[i] = "className";
        el.removeAttribute(name[i]);
      }
    }
  };
  JUL.addCss = function(el,classname){el.className += el.className.length > 0 ? " " + classname : classname;};
  JUL.delCss = function(el,classname){el.className = el.className.replace(new RegExp("( ?|^)"+classname+"\\b","g"),"");};
  JUL.Style = function(el,pro,val){
    if(pro == "Float:"){
      if(document.all){
        el.style.styleFloat = val;
      }else{
        el.style.cssFloat = val;
      }
    }else if(pro == "opacity"){
      if(el.filters){
        el.style.filter = "alpha(opacity=" + val + ")";
        el.style.zoom = 1;
      }else{
        el.style.opacity = val/100;
      }
    }else{
      el.style[pro] = val;
    }
  };
  JUL.Styles = function(el,pros){
    for(var i in pros){
      JUL.Style(el,i,pros[i]);
    }
  };
  JUL.getAttr = function(el,attr){
    if(el == undefined || el.nodeType != 1 || attr == undefined){
      return false;
    }else{
      return el.getAttribute(attr);
    }
  };
  JUL.getWidth = function(el){return el.clientWidth;};
  JUL.getHeight = function(el){return el.clientHeight;};
  JUL.getLeft = function(el){
    if(el.offsetParent){
      return el.offsetLeft + JUL.getLeft(el.offsetParent);
    }else{
      return el.offsetLeft;
    }
  };
  JUL.getTop = function(el){
    if(el.offsetParent){
      return el.offsetTop + JUL.getTop(el.offsetParent);
    }else{
      return el.offsetTop;
    }
  };
  JUL.Prev = function(el){
    var obj = el.previousSibling;
    while(obj && obj.nodeType != 1){obj = obj.previousSibling;}
    return obj;
  };
  JUL.Next = function(el){
    var obj = el.nextSibling;
    while(obj && obj.nodeType != 1){obj = obj.nextSibling;}
    return obj;
  };
  JUL.FirstChild = function(el){
    var elem = el.firstChild;
    while(elem&&elem.nodeType!=1){elem = elem.nextSibling;}
    return elem;
  };
  JUL.LastChild = function(el){
    var elem = el.lastChild;
    while(elem&&elem.nodeType!=1){elem = elem.previousSibling;}
    return elem;
  };
  JUL.mouseX = function(e){
    e = e || window.event;
    return e.pageX?e.pageX:(e.clientX + document.documentElement.scrollLeft);
  };
  JUL.mouseY = function(e){
    e = e || window.event;
    return e.pageY?e.pageY:(e.clientY + document.documentElement.scrollTop);
  };
  JUL.eMouseX = function(e){
    e = e||window.event;
    var activeObj = e.target||e.srcElement;
    return JUL.mouseX(e) - JUL.getLeft(activeObj);
  };
  JUL.eMouseY = function(e){
    e = e||window.event;
    var activeObj = e.target||e.srcElement;
    return JUL.mouseY(e) - JUL.getTop(activeObj);
  };
  JUL.bgPng = function(el,path){
    if(/msie 6.0/.test(navigator.userAgent.toLowerCase())){
      el.style.filter ='progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=scale, src="'+path+'")';
    }else{
     el.style.backgroundImage = 'url('+path+')';
    }
  };
  JUL.event =function(el,eventType,callback){
    if(el.addEventListener){
      el.addEventListener(eventType,callback,false);
    }else if(el.attachEvent){
      var evTypeRef = '__' + eventType;
      if(!el[evTypeRef]){
        el[evTypeRef] = [];
        var orgEvent=el['on'+eventType];
        if(orgEvent){
          el[evTypeRef][0] = orgEvent;
        }
        el['on'+eventType] =  function(e){
          e = e || window.event;
          var evTypeRef = '__' + e.type;
          if(this[evTypeRef]){
            for (var ref in this[evTypeRef]){
              if (Function.call){
                this[evTypeRef][ref].call(this, e);
              }else{
                this.__fn = this[evTypeRef][ref];
                this.__fn(e);
                this.__fn = null;
              }
            }
          }
        };
      }else{
        for(var ref in el[evTypeRef]){if(el[evTypeRef][ref] === callback) return;}
      }
      el[evTypeRef][el[evTypeRef].length] = callback;
    }
  };
  JUL.eventAdd = function(el,event,listener){
    if(el.addEventListener){
      el.addEventListener(event,listener,false);
    }else if(el.attachEvent){
      el.attachEvent("on"+event,listener);
    }
  };
  JUL.eventDel = function(el,event,listener){
    if (el.removeEventListener){
      el.removeEventListener(event,listener,false);
    }else if(el.detachEvent){
      el.detachEvent("on"+event,listener);
    }
  };
  JUL.getTarget = function(e){
		e = e || window.event;
		return e.target||e.srcElement;
	};
	JUL.getKey = function(e){
		e = e || window.event;
		return e.keyCode||e.which;
	};
  JUL.loadJs = function(url,onsuccess,waiting,_onfailure){
    var js = JUL.find("script");
    var i = 0;
    for(i=0; i<js.length; i++){
      if(js[i].src && js[i].src.indexOf(url) != -1){
        onsuccess();
        return;
      }
    }
    var head = JUL.find("HEAD")[0];
    js = JUL.find("head>*script")[0];
    JUL.Attrs(js, {type:"text/javascript",language:"javascript",src:url});
    js.onload = js.onreadystatechange = function(){
      if(this.readyState && this.readyState=="loading") waiting();
      onsuccess();
    };
    js.onerror = function(){
      head.removeChild(js);
      onfailure();
    };
  };
  JUL.loadCss = function(url){
    JUL.Attrs(JUL.find("head>*link")[0],{"type":"text/css","rel":"stylesheet","href":url});
  };
  JUL.pageWidth = function(){return document.body.offsetWidth;};
  JUL.pageHeight = function(){return document.body.offsetHeight;};
  JUL.scrollX = function(){return self.pageXOffset || document.documentElement.scrollLeft/*ie,ff,opera*/||document.body.scrollLeft;/*chrome,safari*/};
  JUL.scrollY = function(){return self.pageYOffset || document.documentElement.scrollTop/*ie,ff,opera*/||document.body.scrollTop;/*chrome,safari*/};
  JUL.workWidth = function(){return document.documentElement.clientWidth;};
  JUL.workHeight = function(){return document.documentElement.clientHeight;};
  JUL.UI = {
    COF:{
      Z:100
    }
  };

  var jul = window.jul = window.$ = function(par1,par2){return new jul.fn.init(par1,par2);};
  jul.fn = jul.prototype = {
    elements : [],
    init : function(par1,par2){
      /*par1 : [] | element | string
       *par2 : element | string
       **/
      if(typeof(par1) === "string"){
        this.elements = JUL.find(par1);
      }else if(par1.nodeType === 1){
        if(par2 == undefined){
          this.elements.push(par1);
        }else if(typeof(par2) === "string"){
          this.elements = JUL.find([par1],par2);
        }else if(par2.nodeType === 1){
          par1.appendChild(par2);
          this.elements.push(par2);
        }
      }else if(JUL.isArray(par1)){
        this.elements = par1;
      }
    },
    each : function(callback){
      var arr = new Array(),i;
      for(i=0;i<this.elements.length;i++){arr.push(this.elements[i]);}
      for(i=0;i<arr.length;i++){callback.call(this,arr[i],i)}
      return this;
    },
    get : function(index){return $(this.elements[index])},
    getDom: function(index){
      if(index == undefined){
        return this.elements;
      }else{
        return this.elements[index];
      }
    },
    size: function(){return this.elements.length;},
    html: function(val){
      if(!val) return this.elements[0].nodeName === "INPUT" || this.elements[0].nodeName === "TEXT" ? this.elements[0].value : this.elements[0].innerHTML;
      return this.each(function(el){if(el.nodeName === "INPUT" || el.nodeName === "TEXT"){el.value = val;}else{el.innerHTML = val;}});
    },
    attr: function(name,val){return this.each(function(el){JUL.Attrs(el, name, val);});},
    attrs: function(pros){return this.each(function(el){JUL.Attrs(el,pros);});},
    removeAttr: function(name){return this.each(function(el){JUL.removeAttr(el,name);});},
    addCss: function(classname){return this.each(function(el){JUL.addCss(el,classname);});},
    delCss: function(classname){return this.each(function(el){JUL.delCss(el,classname);});},
    style: function(pro,val){return this.each(function(el){JUL.Style(el,pro,val);});},
    styles: function(pros){return this.each(function(el){JUL.Styles(el,pros);});},
    remove: function(){this.each(function(el){el.parentNode.removeChild(el);});},
    empty: function(){return this.each(function(el){el.innerHTML = "";});}
  };
  jul.fn.init.prototype = jul.fn;
  JUL.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","), function(item){jul.fn[item] = function(fn){return this.each(function(el){JUL.event(el,item,fn);});};});
})();