﻿ //JS警告框

(function () {
	$.extend({
		alertBtn:{
			OK: parseInt("0001", 2),
			CANCEL: parseInt("0010", 2),
			YES: parseInt("0100", 2),
			ON: parseInt("1000", 2)
		},
		alert: function(content, title, btnType, clickHandler){
			if(!content)return;				
			var eConent = $("<div/>").css({
				"padding": "10px 20px"
			}),
			eTitle = $("<h2/>").css({
				"padding": "5px 10px",
				"background":"#e1e1e1"
			}),
			eBtnArea = $("<div/>").css({
				"padding": "10px",
				"text-align": "center"
			}),
			eBtn = $("<button/>").css({
				"margin": "0 5px",
				"cursor": "pointer",
				"width": "60px",
				"height": "30px"
			}),
			eArea = $("<div/>").css({
				"position": "absolute",
				"border" : "1px #a1a1a1 solid",
				"z-index":"99999",
				"background":"#fff"
			}).append(eTitle).append(eConent).append(eBtnArea),
			eOk,
			eCancel,
			eYes,
			eNo,
			timer,
			w = window.parent ? window.parent : window,
			wHeiget = $(w).height() < 400 ? 400 : $(w).height(),
			wWidth = $(window).width(),
			wTop = $(w.document).scrollTop(),
			top,
			left;
			if(title){
				eTitle.html(title);
			}else{
				eTitle.html("&nbsp;");
			}
			eConent.html(content);			
			
			if(btnType & $.alertBtn.OK){
				eBtnArea.append(eBtn.clone().text("确定").data("type", $.alertBtn.OK));
			}
			if(btnType & $.alertBtn.CANCEL){
				eBtnArea.append(eBtn.clone().text("取消").data("type", $.alertBtn.CANCEL));
			}
			if(btnType & $.alertBtn.YES){
				eBtnArea.append(eBtn.clone().text("是").data("type", $.alertBtn.YES));
			}
			if(btnType & $.alertBtn.NO){
				eBtnArea.append(eBtn.clone().text("否").data("type", $.alertBtn.NO));
			}
			if(!eBtnArea.children().length){
				eBtnArea.append(eBtn.clone().text("确定").data("type", $.alertBtn.OK));
			}
			eBtnArea.bind("click", function(event){
				var target = $(event.target);
				if(target.is("button")){
					eArea.stop(true);
					event.detail = target.data("type");
					if($.isFunction(clickHandler))
						clickHandler.call(event.target ,event);			
					eArea.remove();
				}
			});
			
			$("body").append(eArea);
			
			if(eArea.width() < 250)
				eArea.width(250);
			if(eArea.width() > 550)
				eArea.width(550);
				
			top = Math.max( ( wHeiget - eArea.height() ) / 2, 0) + wTop;
			left = Math.max( ( wWidth - eArea.width() ) / 2, 0);
			eArea.css({"top":top + "px","left":left + "px"});
			
			return eArea;
		},
		alertLimit: function(content, title, btnType, clickHandler, time, timeOverHandler){
			var eArea, cf, tf, bt, ti, t, timer = null;			
			if($.isFunction(title)){
				t = "";
				cf = title;
				if($.isFunction(btnType))
					tf = btnType;
				else if(btnType != undefined){
					bt = btnType;
					if(clickHandler != undefined){
						if ($.isFunction(clickHandler)) {
							tf = clickHandler;
							ti = 1500;
						}else{
							ti = parseInt( clickHandler );
							if($.isFunction(time))
								tf = time;
							else
								tf = cf;
						}
					}
				}else{
					tf = cf;
				}
			}else{
				t = title;
				bt = btnType;
				cf = clickHandler;
				ti = time;
				tf = timeOverHandler;
			}			
			eArea = $.alert(content, t, bt, function(event){
				clearTimeout(timer);
				if($.isFunction(cf))
					cf.call(this ,event)
			});			
			function close(){				
				timer = null;
				eArea.animate({
					opacity: "hide"
				},function(){
					if($.isFunction(tf))		
						tf.call(eArea);
					eArea.remove();
				});
			}
			timer = setTimeout(function(){
				close();
			}, ti ? ti : 1500)
		}
	});
})();

//加载JS文件并缓存

(function($) {
    $.extend({
        JsLoader: function(src, callback, cache) {
			if (typeof src == "string") {
				return $.ajax({
					url: src,
					success: callback,
					cache: cache === undefined ? true : cache,
					dataType: "script"
				});
			}
			else 
				if (src instanceof Array) {
					src = [];
					var _src = src.shift();
					if (src.length >= 1) {
						if (src.length == 1) 
							src = src[0];
						$.JsLoader(_src, function(){
							$.JsLoader(src, callback, cache);
						}, cache);
					}
					else {
						$.JsLoader(_src, callback, cache);
					}
				}
        }
    });
})($);

//box拖动
(function ($) {

    var isMouseDown = false;

    var currentElement = null;

    var bubblings = {};

    var lastMouseX;
    var lastMouseY;
    var lastElemTop;
    var lastElemLeft;

    var dragStatus = {};

    var holdingHandler = false;

    $.getMousePosition = function (e) {
        var posx = 0;
        var posy = 0;
        if (!e) var e = window.event;
        if (e.pageX || e.pageY) {
            posx = e.pageX;
            posy = e.pageY;
        }
        else if (e.clientX || e.clientY) {
            posx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
            posy = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
        }
        return { 'x': posx, 'y': posy };
    };

    $.updatePosition = function (e) {
        var pos = $.getMousePosition(e);
        var spanX = (pos.x - lastMouseX);
        var spanY = (pos.y - lastMouseY);
        $(currentElement).css("top", (lastElemTop + spanY));
        $(currentElement).css("left", (lastElemLeft + spanX));
    };

    $(document).mousemove(function (e) {
        if (isMouseDown && dragStatus[currentElement.id] != 'false') {
            $.updatePosition(e);
            return false;
        }
    });

    $(document).mouseup(function (e) {
        if (isMouseDown && dragStatus[currentElement.id] != 'false') {
            isMouseDown = false;
            return false;
        }
    });


    $.fn.easydrag = function (option) {
        var handler = option && option.handler;
        return this.each(function () {
            if (undefined == this.id || !this.id.length) this.id = "easydrag" + (new Date().getTime());

            bubblings[this.id] = false;

            dragStatus[this.id] = "on";

            $(this).css("cursor", "move");
            if (handler) {
                var draggable = this;
                bubblings[this.id] = true;
                $(draggable).css("cursor", "");
                dragStatus[draggable.id] = "handler";
                handler.css("cursor", "move");

                handler.mousedown(function (e) {
                    holdingHandler = true;
                    $(draggable).trigger('mousedown', e);
                });
                handler.mouseup(function (e) {
                    holdingHandler = false;
                });
            }
            $(this).mousedown(function (e) {

                if ((dragStatus[this.id] == "off") || (dragStatus[this.id] == "handler" && !holdingHandler)) {
                    return bubblings[this.id];
                }

                $(this).css("position", "absolute");

                $(this).css("z-index", parseInt(new Date().getTime() / 1000));

                isMouseDown = true;

                currentElement = this;

                var pos = $.getMousePosition(e);
                lastMouseX = pos.x;
                lastMouseY = pos.y;
                lastElemTop = this.offsetTop;
                lastElemLeft = this.offsetLeft;
                $.updatePosition(e);

                return bubblings[this.id];
            });
        });
    };

})(jQuery);

$.fn.extend({
    //弹出层显示
    mask: function (opts, appToForm) {
        var _this = $(this), target = _this, body = $("body"), layer,
			appToForm = appToForm === undefined ? true : appToForm;

        if (_this.length == 0) return this;

        if (appToForm && $("form").length > 0 && _this.has("form").length == 0) {
            $("form").eq(0).append(_this);
        }
        else {
            body.append(_this);
        }

        if ($("#layer").length == 0)
            layer = $("<div id='layer'></div>").css({ left: 0, top: 0, background: "#fff", opacity: "0.5", width: "100%", height: $(document).height(), zIndex: 1001, position: "absolute" }).prependTo(body);
        else
            $("#layer").css({ height: $(document).height() }).toggle(true);

        if (body.data("isPop")) {
            body.data("isPop").toggle(false);
        }
        body.data("isPop", target);

        target.css("position", "absolute").toggle(true);

        var winHeight = $(window).height();
        var winParentScrollTop = 0;
        if (window.parent && window.parent != window) {
            var winHeight = $(window.parent).height();
            winParentScrollTop = $(window.parent).scrollTop();
        }
        var top = winHeight / 2 - target.height() / 2 + $(document).scrollTop() + winParentScrollTop;
        var left = $(window).width() / 2 - target.width() / 2;


        var callBack = $.isFunction(opts) ? opts : opts ? opts.complete : null;
        var unmaskFn = opts ? opts.exit : null;
        target.css({ "top": top, "left": left, zIndex: 20000, "opacity": "0" }).stop(true).animate({ top: "+=20", "opacity": "1" }, callBack)

        //box draggable
        target.easydrag({
            handler: $(".topBar", target)
        });

        // ie6 select
        if ($.browser.msie && $.browser.version == "6.0") {
            $("select").css("visibility", "hidden");
            $("select", target).css("visibility", "visible");
        }

        //close button
        $(".span_close", target).unbind("click").click(function () {
            target.unmask(unmaskFn);
        })
        return target;
    },
    backToMiddle: function () {
        var _this = $(this);
        var top = $(window).height() / 2 - _this.height() / 2 + $(document).scrollTop();
        var left = $(window).width() / 2 - _this.width() / 2;
        _this.stop(true).animate({ "top": top, "left": left })
    },
    //弹出层关闭
    unmask: function (callBack) {
        return this.each(function () {
            var _this = $(this);
            var target = $(this);
            if (target.data("caller")) {
                var object = target.data("caller");
                var x = object.offset().left;
                var y = object.offset().top;
                var width = _this.outerWidth();
                var height = _this.outerHeight();
                var objectWidth = object.outerWidth();
                var objectHeight = object.outerHeight();
                _this.stop(true).animate({ "top": y, "left": x, "width": objectWidth, "height": objectHeight, "opacity": "0.5" }, function () {
                    _this.css({ "opacity": 1, "width": width, "height": height }).hide();
                });
            }
            else {
                target.stop(true).animate({ top: "+=20", opacity: 0 }, 300, function () {
                    $("#layer").toggle(false);
                    $(this).toggle(false).css("opacity", 1);
                    if ($.isFunction(callBack)) {
                        callBack();
                    }
                })
            }
            if ($.browser.msie && $.browser.version == "6.0") {
                $("select").css("visibility", "visible");
            }
            if ($("#layer").length > 0) {
                $("#layer").toggle(false);
            }
            $("body").data("isPop", null);
        })
    },
    popup: function (callback) {
        return this.mask(callback, false);
    },
    pop: function (left, top, parent) {
        return $(this).each(function () {
            var e = $(this),
				iframe = $("iframe.popIframe", e);
            e.css({ top: top, left: left }).appendTo(parent ? parent : "body");
            if (iframe.length == 0) {
                iframe = $("<iframe scrolling='no' frameborder='0'/>").css({
                    "position": "absolute",
                    "top": 0,
                    "left": 0,
                    "z-index": "-1"
                }).appendTo(e).addClass("popIframe");
            }
            iframe.width(e.get(0).offsetWidth).height(e.get(0).offsetHeight)
        });
    }
});


$.fn.docClickHide = function (opts) {
	var _this = this;
	if(opts && opts["handle"]){
		handle = opts["handle"];
		handle.bind("click",function(event){
			if(_this.css("display") == "none"){
				_this.show();
			}
			else {
				_this.hide();
			}
			event.stopPropagation();
		})
	}
	_this.bind("click",function(event){
		event.stopPropagation();
	})
	$(document).bind("click",function(event){
		if(event.target != $(_this).get(0) && $(_this).has(event.target).length == 0){
			$(_this).hide();
		}
	});
	return this;
}

//input keyword
$.fn.keywords = function (opts) {
    var opts = opts;
    var strDefault;
    if(opts && typeof opts == "string"){
        strDefault = opts;
    }
    else if(opts && typeof opts == "object"){
        strDefault = opts["key"];
    }
    else {
        strDefault = "";
    }
    if ($(this).val() == "") {
        $(this).val(strDefault);
    }
    if ($(this).val() == strDefault) {
        $(this).css("color", "#888");
    }
    $(this).bind("focus", function () {
        if ($(this).val() == strDefault) {
            $(this).val("").css("color", "#000");
        }
    })
    $(this).bind("blur", function () {
        if ($(this).val() == "") {
            $(this).val(strDefault).css("color", "#888");
        }
    })
    return this;
}

$.fn.enter = function(btn){
    var _this = $(this);
    _this.bind("keydown",function(evt){
        if(evt.keyCode == 13){
			if($.isFunction(btn))
				btn.call(_this, _this);
			else
            	$(btn).trigger("click");
			return false;
        }
    });
	return this;
}

// Tabs exchange
$.fn.tabs = function (opts, callBack) {
    var opts = opts;
    if(!opts) return;
    var evt = opts["evt"] ? opts["evt"] : opts["type"] ? opts["type"] : "click";
    var className = opts["className"] ? opts["className"] : "current";
    var target = opts["target"]? opts["target"] : null;
    var index = opts["index"]? opts["index"] : 0;
    
    $(this).eq(index).addClass(className);
	if (target) {
		target.toggle(false);
		target.eq(index).toggle(true);
	}
    $(this).each(function (i) {
        $(this).unbind().bind(evt, function () {
            $(this).addClass(className).siblings().removeClass(className);
            $(target).toggle(false).eq(i).toggle(true);
            if (callBack && jQuery.isFunction(callBack)) 
				callBack.call(this ,i);
        })
    })
}

// select all input[type=checkbox]
$.fn.selectAll = function (opts, context) {
	var name = typeof opts == "object" && opts.checkName ?  opts.checkName : opts.toString(),
		checkbox = $(this).is("input") && $(this).attr("type") == "checkbox",
		checked;
	if(!name)return $(this);
	return $(this).click(function(){
		checked = checkbox ? $(this).attr("checked") : !$(this).data("checked");
		$("input[name=" + name + "]", context ? context : document).attr("checked", checked);
		if(!checkbox)
			$(this).data("checked", checked);
	});
}
// Document cookies
$.cookie = new Object();
$.cookie.set = function (CookieName, CookieValue, nDays, Domain) {

    if (CookieName === null || CookieName === "" || CookieName === undefined) return "";
    var today = new Date();
    var expire = new Date();
    if (nDays == null || nDays == 0) {
        nDays = 1;
    }
    expire.setTime(today.getTime() + 3600000 * 24 * nDays);
    var strDomain = "";
    if(Domain) strDomain = "domain=" + Domain + ";";
    document.cookie = CookieName + "=" + escape(CookieValue) + ";expires=" + expire.toGMTString() + ";path=/;" + strDomain;
}
$.cookie.get = function(CookieName){
    var strCookie = document.cookie;
    var arrCookie = strCookie.split("; "); 
    for (var i = 0; i < arrCookie.length; i++) { 
        var arr = arrCookie[i].split("="); 
        if(arr.length >= 1)
        {
            if (unescape(arr[0].replace(/(^\s*)|(\s*$)/g, "")) == CookieName)
            {
                if(arr.length >= 2)
                {
                    try
                    {
                        return unescape(arr[1]);
                    }
                    catch(ex)
                    {
                        return "";
                    }
                }
                else
                {
                    return "";
                }
            }
        }
    }
    return "";
}

$.cookie.del = function(CookieName){
    var date=new Date();
    date.setTime(date.getTime()-3600000);
    document.cookie=CookieName+"=v; expire="+date.toGMTString();
}

// tips
$.tips = function (text,evt) {
    if(!text) return;
    var customTips = $("#CUSTOM_TIPS");
    if(customTips.length == 0){
        customTips = $("<div style='border:1px solid #000; background:yellow; padding:2px 4px; position:absolute; font-size:12px' />").html(text);
    }
    var x = evt.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
    var y = evt.clientY + document.body.scrollTop + document.documentElement.scrollTop;
    customTips.css({"left": x, "top": y + 21 }).prependTo(document.body).show();
    var auto = setTimeout(function(){
        if(customTips.get(0).style.display != "none"){
            customTips.hide();
        }
        clearTimeout(auto);
    },5000)
    $(document).click(function(e){
        if(e.target != customTips.get(0)){
            customTips.hide();
            clearTimeout(auto);
        }
    })
    
    evt.stopPropagation();
}

// copy
function CopyText(text) {
    if (document.all){
        window.clipboardData.setData("text",text);
        alert("复制成功");
    }
    else
    {
        alert("此功能只能在IE上有效");
    }
};

// addfavorite
function addfavorite(url,title) {
    var url = url || top.location.href;
    var title = title || top.document.title;
    if (document.all) {
        window.external.addFavorite(url,title); } 
    else if (window.sidebar)  { 
        window.sidebar.addPanel(title, url, "");  
    }
}

function json_encode (feed){
	var r = [], s = "";
	if(feed === undefined || feed === null || feed === "")return "\"\"";
	if(feed instanceof Array){
		r.push("[");
		for(var i = 0; i < feed.length; i++){
			r.push(s);
			r.push(arguments.callee(feed[i]));
			s = ",";
		}
		r.push("]");
	}else if(typeof feed == "object"){
		r.push("{");
		for(var k in feed){
			r.push(s);
			r.push("\"");
			r.push(k);
			r.push("\":");
			r.push(arguments.callee(feed[k]));
			s = ",";
		}
		r.push("}");
	}else if(!isNaN(feed) && (feed.toString().indexOf("0") != 0 || feed == 0)){
		r.push(feed);
	}else {
		feed = feed.toString().replace("\\", "\\\\");
		feed = feed.replace("\"", "\\\"");
		r.push("\"" + feed + "\"");
	}
	return r.join("");
}
function json_decode(str){
	try{		
		return $.parseJSON(str);
	}catch(e){
		return null;
	}
}
function htmlEncode(html){
	return html.replace(/\</g, "&lt;").replace(/\>/g,"&gt;");
}

$.extend({
	//根据网址在回调函数中返回expr中和网址匹配的a标签
	currentByHref:function(expr, href, fun){
		var elems = $(expr), h, c, p = -1, e = null;
		elems = elems.is("a") ? elems : $("a", elems);
		if(elems.length == 0)return;
		
		if(typeof href == "string"){
			h = href;
		}else{
			h = location.href;
		}
		
		if($.isFunction(href)){
			c = href;
		}else{
			c = fun;
		}
		
		elems.each(function(){
			var _p;
			_p = h.indexOf($(this).attr("href"));
			if(_p != -1 && (_p < p || p == -1)){
				e = $(this);
				p = _p;
			}
		});
		if (e) {			
			$.isFunction(c) ? c.call(e, e) : e.addClass("current");
		}
	}
});
(function(window){
	//localhost.search 读写
	var gets = null;
	window.$_GET = function (name){
		if (!gets) {
			var ls = location.search, _pos, paraName, paraValue;
			gets = {};
			ls = ls.substr(1);
			ls = ls.split("&");
			for (var i = 0; i < ls.length; i++) {
				_pos = ls[i].indexOf('=');
				if (_pos == -1) 
					continue;
				paraName = ls[i].substring(0, _pos);
				paraValue = ls[i].substring(_pos + 1);
				gets[paraName] = paraValue;
			}
		}		
		if (gets[name]) 
			return $.trim(gets[name].replace(/\+/g, " "));
		else
			return null;
	}
	
	window.setSearch = function(){
	    var name, val, len = arguments.length, obj ={}, ls = location.search, r1, r2, arr = [], c = "";
	    if(len == 2){
	        obj[arguments[0]] = arguments[1];
	    }else{
	        obj = arguments[0];
	    }
	    if(!ls){
	        arr.push("?");      
	        for(var k in obj){
	            arr.push(c);
	            arr.push(k);
	            arr.push("=");
	            arr.push(obj[k]);
	            c = "&";
	        }
	        ls = arr.join("");
	    }else{
	        for(var k in obj){
	            r1 = new RegExp("&|\\?"+ k + "=","i");
	            if(r1.test(ls)){
	                r2 = new RegExp("^(\\?(?:.*&)*" + k + "=).*?(&.*)*$","i");
	                ls = ls.replace(r2, "$1"+ obj[k] +"$2");
	            }else{
	                ls += "&" + k + "=" + obj[k];
	            }
	        }
	    }
	    location.search = ls;
	}
})(window);
(function(){
	var len = 0, timer = null;
	$.extend({		
		ajaxLoading:function(expr){
			var e = $(expr ? expr : "<div class=\"ajaxloading\">数据加载中,请稍候...</div>").toggle(false);
			e.css({
				"background": "url(/newimages/loadinganimation.gif) no-repeat 0 0",
				"top": "0px",
				"left":"40%",
				"height":"16px",
				"line-height":"16px",
				"position":"absolute",
				"padding-left":"16px"
			});
			$("body").append(e);
			$(document).bind("scroll.ajaxloading", function(){
				if(!timer)
					timer = setTimeout(function(){
						e.css({top: $(this).scrollTop() + "px"});
						timer = null;					
					},10);
			});
			e.ajaxStart(function(){
				len++;
				e.toggle(true);
			}).ajaxStop(function(){
				len--;
				if(len <= 0){
					len = 0;
					e.toggle(false);
				}
			});
		}
	});
})();





