﻿/*
*	My JavaScript Framework
*	Version	:	0.8.2.8
*	Author	:	misshjn
*	Email	:	misshjn@163.com
*/
function NameSpace(){};
function StringBuffer(){this.data = []};

var Method = {
	Version : "0.8.2.8",
	Element	: function(){
		this.version = Method.Version;
		this.hide = function(){this.style.display="none"; return this};
		this.show = function(){this.style.display=""; return this};
		this.getStyle = function(s){
			var value = this.style[s.camelize()];
			if (!value){
				if (this.currentStyle){
					value = this.currentStyle[s.camelize()];
				}else if (document.defaultView && document.defaultView.getComputedStyle){
					var css = document.defaultView.getComputedStyle(this, null);
					value = css ? css.getPropertyValue(s) : null;
				}
			}
			return value;
		};
		this.setStyle = function(s){
			var sList = s.split(";");
			for (var i=0,j; j=sList[i]; i++){
				var k = j.split(/:(?!\/\/)/g);
				this.style[k[0].trim().camelize()] = k[1].trim();
			}
			return this;
		};
		this.toggle = function(){this.getStyle("display")=="none"?this.show():this.hide(); return this};
		this.hasClassName = function(c){return this.className.hasSubString(c," ");};
		this.addClassName = function(c){if(!this.hasClassName(c)){this.className+=" "+c};return this};
		this.removeClassName = function(c){if(this.hasClassName(c)){this.className = (" "+this.className+" ").replace(" "+c+" "," ").trim(); return this}};
		this.toggleClassName = function(c){if(this.hasClassName(c)){this.removeClassName(c);}else{this.addClassName(c);};return this;}
		this.getElementsByClassName = function(c){return this.getElementsByAttribute("className",c)};
		this.getElementsByAttribute = function(n,v){ //name,value;
			var elems = this.getElementsByTagName("*");
			var elemList = [];
			for (var i=0,j; j=elems[i]; i++){
				var att = j[n] || j.getAttribute(n);
				if (att==v){
					elemList.push(j);
				}
			}
			return elemList;
		};
		this.parentIndex = function(p){
			if (this==p){return 0}			
			for (var i=0,n=this; n=n.parentNode; i++){
				if(n==p){return i;}
				if(n==document.documentElement) return -1;
			}
		}
		this.nextElement = function(){
			var n = this;
			for (var i=0,n; n = n.nextSibling; i++){
				if(n.nodeType==1) return $(n);
			}
			return null;
		};
		this.previousElement = function(){
			var n = this;
			for (var i=0,n; n = n.previousSibling; i++){
				if(n.nodeType==1) return $(n);
			}
			return null;
		};
		this.moveAhead = function(){
			if (this.previousElement()){
				this.parentNode.insertBefore(this,this.previousElement());
			}
			return this;
		};
		this.moveBack = function(){
			var n = this.nextElement();
			if (n){
				this.parentNode.removeChild(n);
				this.parentNode.insertBefore(n,this);
			}
			return this;
		};
	},
	Array :	function(){
		this.indexOf = function(){
			for (i=0; i<this.length; i++){
				if (this[i]==arguments[0])
					return i;
			}
			return -1;
 	    };
		this.lastIndexOf = function(){
			for (i=this.length-1; i>=0; i--){
				if (this[i]==arguments[0])
					return i;
			}
			return -1;
	    };
		this.each = function(fn){
			for (var i=0,len=this.length; i<len; i++){
				fn(this[i],i);
			}
			return this;
		};
	},
	String : function(){
		this.trim = function(){
			var _re,_argument = arguments[0] || " ";
			typeof(_argument)=="string"?(_argument == " "?_re = /(^\s*)|(\s*$)/g : _re = new RegExp("(^"+_argument+"*)|("+_argument+"*$)","g")) : _re = _argument;
			return this.replace(_re,"");
		};
		this.ltrim = function(){
			var _re, _argument = arguments[0] || " ";
			typeof(_argument)=="string"?(_argument == " "?_re = /(^\s*)/g : _re = new RegExp("(^"+_argument+"*)","g")) : _re = _argument;
			return this.replace(_re,"");
		};
		this.rtrim = function(){
			var _re, _argument = arguments[0] || " ";
			typeof(_argument)=="string"?(_argument == " "?_re = /(\s*$)/g : _re = new RegExp("("+_argument+"*$)","g")) : _re = _argument;
			return this.replace(_re,"");
		};
		this.stripTags = function(){
			return this.replace(/<\/?[^>]+>/gi, '');
		};
		this.cint = function(){
		    return this.replace(/\D/g,"")-0;
		};
		this.camelize = function(){
			return this.replace(/(-\S)/g,function($1){return $1.toUpperCase().substring(1,2)})
		};
		this.hasSubString = function(s,f){
			if(!f) f="";
			return (f+this+f).indexOf(f+s+f)==-1?false:true;
	    };
		this.toXMLString = function(){
			var arr = arguments[0].split("&");
			var str = new StringBuffer();
			for (var i=0,len=arr.length; i<len; i++){
				var item = arr[i].split("=");
				str.append("<"+item[0]+"><![CDATA["+item[1]+"]]></"+item[0]+">");
			}
			return str.toString();
		};
		this.URLEncode = function(){ return encodeURIComponent(this)};
		this.URLDecode = function(){ return decodeURIComponent(this)};
	},
	StringBuffer : function(){
		this.append = function(){this.data.push(arguments[0]);return this};
		this.toString = function(){return this.data.join(arguments[0]||"")};
		this.length = function(){return this.data.length};
		this.clear = function(){this.data.length=0; return this;}
	},
	NameSpace : function(){
		this.copyChild = this.appendChild = function(ns){
			for (var key in ns){
				this[key] = ns[key];
			}
			return this;
		};
	}
};

Method.Array.apply(Array.prototype);
Method.String.apply(String.prototype);
Method.StringBuffer.apply(StringBuffer.prototype);
Method.NameSpace.apply(NameSpace.prototype);

function $(){
	var elem = null;
	if(typeof(arguments[0])!="string"){
		elem = arguments[0];
		if(!elem){return null;}
		if(elem["version"]){
			return elem;
		}else{
			Method.Element.apply(elem);
			return elem;
		}
	}
	//CSS Selector
	if(arguments[0].indexOf(" ")==-1 && arguments[0].indexOf(",")==-1){
		elem = document.getElementById((arguments[0].indexOf("#")==0?arguments[0].substring(1):arguments[0]));
		if(!elem){return null;}
		Method.Element.apply(elem);
		return elem;
	}else{
		var path = arguments[0].replace(/(^,*)|(,*$)/g,"").split(",");
		var allelem = [];
		for(var a=0; a<path.length; a++){			
			var p = path[a].trim().replace(/ +/g," ").split(" ");
			for (var i=0; i<p.length; i++){
				if (p[i].indexOf("#")==0){ //id
					elem = $(p[i].substring(1)); 
					continue;
				}
				var attsel = [];
				var elem_temp=[];
				if (p[i].indexOf(".")!=-1){ // (tag+)className
					var tags = p[i].replace(/\[.*?\]/gi,function($1){attsel.push($1.replace(/\[|\]/g,""));return "";});
					var tag = tags.split(".")[0];
					var cn = tags.split(".")[1];
					if (elem == null){
						elem_temp = $._find(tag,cn,document);
					}else{
						if (elem instanceof Array){
							var arr = [];
							elem.each(function(obj){$._find(tag,cn,obj).each(function(){arr.push(arguments[0])});});						
							elem_temp = arr;
						}else{
							elem_temp = $._find(tag,cn,elem);
						}
					}
					elem = $._attributeSelector(attsel,elem_temp);
					continue;
				}else{//tag
					var tag = p[i].replace(/\[.*?\]/gi,function($1){attsel.push($1.replace(/\[|\]/g,""));return "";});
					if(elem == null){
						elem_temp = $A(document.getElementsByTagName(tag)).each(function(obj){$(obj)});
					}else{
						if (elem instanceof Array){
							var arr = [];
							elem.each(function(obj){$A(obj.getElementsByTagName(tag)).each(function(obj){arr.push($(obj))})});
							elem_temp = arr;
						}else{
							elem_temp = $A(elem.getElementsByTagName(tag)).each(function(obj){$(obj)});
						}
					}
					elem = $._attributeSelector(attsel,elem_temp);
				}
			}
			elem.each(function(obj){allelem.push(obj)});
			elem = null;
		}
		return allelem;
	}
};	
$._find = function(tag,cn,par){
	var arr = par.getElementsByTagName((tag==""?"*":tag));
	var elem = [];
	for(var i=0,j; j=$(arr[i]); i++){
		if((" "+j.className+" ").indexOf(" "+cn+" ")!=-1){elem.push(j);}
	}
	return elem;
}
$._attributeSelector = function(attsel,elem_temp){
	for (var j=0; j<attsel.length; j++){
		var elemArr = [];
		var k=attsel[j].split(/=|!=/g);
		if(k.length==1){
			elem_temp.each(function(n){
				if(n.getAttribute(k[0].trim())){
					elemArr.push(n);
				}
			});
		}else if(k.length>1){
			elem_temp.each(function(n){
				if(attsel[j].indexOf("!=")!=-1){
					if(n.getAttribute(k[0].trim())!=k[1].trim()){
						elemArr.push(n);
					}
				}else{
					if(n.getAttribute(k[0].trim())==k[1].trim()){
						elemArr.push(n);
					}
				}
			});						
		}						
		elem_temp.length = 0;
		elem_temp = elemArr;
	}
	return elem_temp; 
}

$.Ajax = {};
$.Ajax.Request = function(url,_method,para,complete,error){
	return new Ajax.Request(url,{method:_method,parameters:para,onComplete:complete,onError:error});
};
$.Ajax.get = function(url,complete,error){ return $.Ajax.Request(url,"get","",complete,error); }
$.Ajax.post = function(url,para,complete,error){ return $.Ajax.Request(url,"post",para,complete,error);}
$.Ajax.update = function(url,id,para){ return $.Ajax.Request(url,(para?"post":"get"),(para?para:Math.random()),function(x){if("INPUT,SELECT,BUTTON,TEXTAREA".hasSubString($(id).tagName,",")){$(id).value=x.responseText}else{$(id).innerHTML=x.responseText}}); }

$.Browse = {
	isIE : function(){return navigator.userAgent.hasSubString("MSIE");},
	isFF : function(){return navigator.userAgent.hasSubString("Firefox");},
	isOpera : function(){return navigator.userAgent.hasSubString("Opera")},
	isSafari : function(){return navigator.userAgent.hasSubString("Safari");},
	isGecko : function(){return navigator.userAgent.hasSubString("Gecko");},
	IEVer : function(){return $.Browse.isIE() ? parseInt(navigator.userAgent.split(";")[1].trim().split(" ")[1]) : 0;}
}

$(document);

var Ajax={
	xmlhttp:function (){
		try{
			return new ActiveXObject('Msxml2.XMLHTTP');
		}catch(e){
			try{
				return new ActiveXObject('Microsoft.XMLHTTP');
			}catch(e){
				return new XMLHttpRequest();
			}
		}
	}
};
Ajax.Request=function (){
	if(arguments.length<2)return ;
	var para = {asynchronous:true,method:"GET",parameters:""};
	for (var key in arguments[1]){
		para[key] = arguments[1][key];
	}
	var _x=Ajax.xmlhttp();
	var _url=arguments[0];
	if(para["parameters"].length>0) para["parameters"]+='&_=';
	if(para["method"].toUpperCase()=="GET") _url+=(_url.match(/\?/)?'&':'?')+para["parameters"];
	_x.open(para["method"].toUpperCase(),_url,para["asynchronous"]);
	_x.onreadystatechange=function (){
		if(_x.readyState==4){
			if(_x.status==200)
				para["onComplete"]?para["onComplete"](_x):"";
			else{
				para["onError"]?para["onError"](_x):"";
			}
		}
	};
	if(para["method"].toUpperCase()=="POST")_x.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

	for (var ReqHeader in para["setRequestHeader"]){
		_x.setRequestHeader(ReqHeader,para["setRequestHeader"][ReqHeader]);
	}
	_x.send(para["method"].toUpperCase()=="POST"?(para["postBody"]?para["postBody"]:para["parameters"]):null);

};

var Cookies = {
    get : function(n){
	    var dc = "; "+document.cookie+"; ";
	    var coo = dc.indexOf("; "+n+"=");
	    if (coo!=-1){
		    var s = dc.substring(coo+n.length+3,dc.length);
		    return unescape(s.substring(0, s.indexOf("; ")));
	    }else{
		    return null;
	    }
    },
    set : function(name,value,expires){
        var expDays = expires*24*60*60*1000;
        var expDate = new Date();
        expDate.setTime(expDate.getTime()+expDays);
        var expString = expires ? "; expires="+expDate.toGMTString() : "";
        var pathString = ";path=/";
        document.cookie = name + "=" + escape(value) + expString + pathString;
    },
    del : function(n){
	    var exp = new Date();
	    exp.setTime(exp.getTime() - 1);
	    var cval=this.get(n);
	    if(cval!=null) document.cookie= n + "="+cval+";expires="+exp.toGMTString();
    }
}

function $A(list){
	var arr = [];
	for (var i=0,len=list.length; i<len; i++){
		arr[i] = list[i];
	}
	return arr;
}
function $D(str){return str.URLDecode();}
function $E(str){return str.URLEncode();}
function $V(id){return $(id).value}
function request(paras){
	var url = location.href;
	var paraString = "&"+url.substring(url.indexOf("?")+1,url.length)+"&";
	if (paraString.indexOf("&"+paras+"=")==-1){return ""};
	paraString = paraString.substring(paraString.indexOf("&"+paras+"=")+paras.length+2,paraString.length);
	return paraString.substring(0,paraString.indexOf("&"));
}
