﻿// Global Js File.

var FILE_URL = 'http://file.adhol.com';


Object.extend(Date.prototype,{
    format : function(format) {
        var ret;
        var date = new Date(this);
        var d = new Date();
        date = date.addMinutes(this.getTimezoneOffset());
        try{
            var yyyy = date.getFullYear();
            var yy = (yyyy + "").substr(2);
            var M = date.getMonth() + 1;
            var MM = M < 10 ? ("0" + M) : M;
            var d = date.getDate();
            var dd = d < 10 ? ("0" + d) : d;
            var h = date.getHours();
            var hh = h < 10 ? ("0" + h) : h;
            var m = date.getMinutes();
            var mm = m < 10 ? ("0" + m) : m;
            var s = date.getSeconds();
            var ss = s < 10 ? ("0" + s) : s;
		    if(typeof format == "undefined") format = "yy/MM/dd hh:mm:ss";
            ret = format.replace("yyyy",yyyy).replace("yy",yy);
            ret = ret.replace("MM",MM).replace("M",M);
            ret = ret.replace("dd",dd).replace("d",d);
            ret = ret.replace("hh",hh).replace("h",h);
            ret = ret.replace("mm",mm).replace("m",m);
            ret = ret.replace("ss",ss).replace("s",s);
        }catch(e){
            ret = e.message;
        }
        return ret;
    },
    addYear : function(value) {
        var date = new Date(this);
        date.setYear(date.getYear() + parseInt(value));
        return date;
    },
    addMonth : function(value){
        var date = new Date(this);
        date.setMonth(date.getMonth() + parseInt(value));
        return date;
    },
    addDate : function(value){
        var date = new Date(this);
        date.setDate(date.getDate() + parseInt(value));
        return date;
    },
    addHours : function(value){
        return new Date(this - (0 - parseInt(value) * 1000 * 60 * 60));
    },
    addMinutes : function(value){
        return new Date(this - (0 - parseInt(value) * 1000 * 60));
    },
    addSeconds : function(value){
        return new Date(this - (0 - parseInt(value) * 1000));
    },
    add : function(date,type){
        try{
            if(typeof date != "object") date = new Date(date);
            type = parseInt(type);
            var i = 0;
            var arg_len = arguments.length;
			
            for(var idx = 2,start = 0; idx < arg_len; idx++){
                switch(start){
                    case 0:
						start++;
                        if(type & 0x100000){
							if(this.debug) alert("addYear");
							this.addYear(date,arguments[idx]);
                            break;
                        }
                    case 1:
						start++;
                        if(type & 0x010000){
							if(this.debug) alert("addMonth");
                            this.addMonth(date,arguments[idx]);
                            break;
                        }
                    case 2:
						start++;
                        if(type & 0x001000){
							if(this.debug) alert("addDate");
                            this.addDate(date,arguments[idx]);
                            break;
                        }
                    case 3:
						start++;
                        if(type & 0x000100){
							if(this.debug) alert("addHours");
                            this.addHours(date,arguments[idx]);
                            break;
                        }
                    case 4:
						start++;
                        if(type & 0x000010){
							if(this.debug) alert("addMinutes");
                            this.addMinutes(date,arguments[idx]);
                            break;
                        }
                    case 5:
						start++;
                        if(type & 0x000001){
							if(this.debug) alert("addSeconds");
                            this.addSeconds(date,arguments[idx]);
                            break;
                        }
                    default:
                        break;
                }
            }
            
        }catch(e){
			alert("DateTime.add 错误:" + e.message);
        }
        return date;
    }
});

Object.extend(Position,{
    setZIndex : function(above,below)
    {
        var iframe = $("__iframe__top__");
        if(iframe == null)
        {
		    iframe = document.createElement("iframe");
		    iframe.id = "__iframe__top__";
		    Element.setStyle(iframe,
		    {
                'position'  : 'absolute',
		        'left' : '0',
		        'top' : '0',
		        'opacity' : '100',
		        'border' : 'none',
		        'width' : '10',
		        'height' : '10'
		    });
		    iframe.src = "about:blank";
		    document.body.appendChild(iframe);
        }
        if(arguments.length == 0)
        {
            //hide iframe;
            Element.hide(iframe);
            return;
        }
        if(arguments.length == 1)
        {
            //set iframe below object;
            above = $(above);
            var dimensions = above.getDimensions();
            var pos = above.positionedOffset();
            iframe.setStyle(
                {
                    'left' : pos.left,
                    'top' : pos.top,
                    'width' : dimensions.width,
                    'height' : dimensions.height,
                    'zIndex' : above.getStyle('zIndex') - 1
                }
            );
	        Element.show(iframe);
	        return;
        }
        for(var i = 1; i < arguments.length; i++)
        {
            //set zIndex
            $(arguments[i]).style.zIndex = $(arguments[i - 1]).style.zIndex - 1;
        }
    },
    setCenter : function(e)
    {
        e = $(e);
        var size = Element.getDimensions(e);
        var left = (document.body.clientWidth - size.width) / 2;
        var top = (document.body.clientHeight - size.height) / 2;
        top += document.body.scrollTop;
        Position.absolutize(e);
        e.style.left = left;
        e.style.top = top;
    },
    getBackground : function()
    {
        var bg = $("__div__background__");
        if(bg == null)
        {
            bg = document.createElement("div");
            bg.id = "__div__background__";
            bg.style.position = "absolute";
            bg.style.display = "none";
            document.body.appendChild(bg);
            bg.style.left = 0;
            bg.style.top = 0;
            bg.style.filter = "alpha(opacity=25)";
            bg.style.background = "#69F";

        }
        var w = document.body.scrollWidth;
        var h = document.body.scrollHeight;
        bg.style.width = w;
        bg.style.height = h;
        return bg;
    }
});

/*

        Select Action

*/
var SelectBox = {
	insert : function(a,b,c){
        var ca = $(a);
        if(typeof ca != "object" || ca.tagName != "SELECT"){
            alert("对象" + a + "不正确！");
            return;
        }
	    if(arguments.length == 2){  //a(select) -> b(select)
	        var cb = $(b);
            if(typeof cb != "object" || cb.tagName != "SELECT"){
                alert("对象" + b + "不正确！");
                return;
            }
            var idx = ca.selectedIndex;
            if(idx == -1) return;
            var item;
            for(var i = idx; i < ca.options.length;i++){
                item = ca.options[i];
                if(item.selected && !this.findItem(cb,item.text,item.value)){
                    var len = cb.options.length;
                    cb.options.length = len + 1;
                    cb.options[len] = new Option(item.text,item.value);
                }
            }
	    }else if(arguments.length == 3){    //Option(b,c) -> a(select)
            var len = ca.options.length;
            ca.options.length = len + 1;
            ca.options[len] = new Option(b,c);
	    }



    },
    insertAll : function(a,b){
        var ca = $(a);
        var cb = $(b);
        if(typeof ca != "object" || ca.tagName != "SELECT"){
            alert("对象" + a + "不正确！");
            return;
        }
        if(typeof cb != "object" || cb.tagName != "SELECT"){
            alert("对象" + b + "不正确！");
            return;
        }
        var item;
        for(var i = 0; i < ca.options.length;i++){
            item = ca.options[i];
            if(!this.findItem(cb,item.text,item.value)){
                var len = cb.options.length;
                cb.options.length = len + 1;
                cb.options[len] = new Option(item.text,item.value);
            }
        }
    },
    remove : function(a){
        var ca = $(a);
        if(typeof ca != "object" || ca.tagName != "SELECT"){
            alert("对象" + a + "不正确！");
            return;
        }
        var idx = ca.selectedIndex;
        if(idx == -1) return;
        var item;
        for(var i = idx; i < ca.options.length;){
            item = ca.options[i];
            if(item.selected){
                ca.options.remove(i);
            }else{
                i++;
            }
        }
    },
    removeAll : function(a){
        var ca = $(a);
        if(typeof ca != "object" || ca.tagName != "SELECT"){
            alert("对象" + a + "不正确！");
            return;
        }
        ca.options.length = 0;
    },
    findItem : function(o,t,v){
        var item = null;
        for(var i = 0; i < o.options.length; i++){
            item = o.options[i];
            if(item.text == t && item.value == v) return item;
        }
        return null;
    }
};


/* Tag */
var Tag_Class = Class.create({
    sortID : 0,
    flag : 0x7FFFFFFF,
    _div : null,
    createAutoComplete : function(element,sortID,flag)
    {
        var oTag = new Tag_Class();
        if(!Object.isUndefined(flag))
        {
            oTag.sortID = sortID;
            oTag.flag = flag;
        }else if(!Object.isUndefined(sortID))
        {
            oTag.flag = sortID;
        }
        element = $(element);
        Event.observe(element, 'focus', oTag._autoCompleteFocus.bind(oTag,element));
        Event.observe(element, 'blur', oTag._autoCompleteBlur.bind(oTag,element));
    },
    _createTagListDiv : function()
    {
        var tagListDiv = $('tagListDiv');
        if(tagListDiv) return;
        var div = document.createElement('div');
        div.id = 'tagListDiv';
        div.innerHTML = '';
        document.body.appendChild(div);
    },
    _autoCompleteFocus : function(element)
    {
        if(element.observe_tag != null) return;
        this._createTagListDiv();
        element.observe_tag = new PeriodicalExecuter(this._listAutoComplete.bind(this,element),0.5);
    },
    _autoCompleteBlur : function(element)
    {
        var tagListDiv = $('tagListDiv');
        var dimensions = tagListDiv.getDimensions();
        var pos = tagListDiv.positionedOffset();
        var x = Event.pointerX(event);
        var y = Event.pointerY(event);
        if(x < pos.left 
            || x > pos.left + dimensions.width 
            || y < pos.top
            || y > pos.top + dimensions.height)
        {
            if(element.observe_tag != null)
            {
                element.observe_tag.stop();
                element.observe_tag = null;
                tagListDiv.hide();  
                Position.setZIndex(); 
            }
        }
    },
    _listAutoComplete : function(element)
    {
        var o = element
        var tagListDiv = $('tagListDiv');
        var keywords = o.value.strip();
        if(keywords.blank()) {
            tagListDiv.hide();
            Position.setZIndex();
            return;
        }
        if(keywords == o.last_keywords)
        {
            if(tagListDiv.innerHTML != '' && !tagListDiv.visible()) {
                tagListDiv.show();
                Position.setZIndex(tagListDiv);
            }
            return;
        }
        var offset = keywords.lastIndexOf(',');
        if(offset == -1) offset = keywords.lastIndexOf('，');
        if(offset != -1) 
        {
            var tmp = keywords.substring(offset + 1);
            o.last_keywords = o.value = keywords.substring(o,offset) + ',' + tmp;
            keywords = tmp;
        }
        if(keywords.blank()) {
            tagListDiv.hide();
            Position.setZIndex();
            return;
        }
        if(keywords == o.last_keywords)
        {
            if(tagListDiv.innerHTML != '' && !tagListDiv.visible()) {
                tagListDiv.show();
                Position.setZIndex(tagListDiv);
            }
            return;
        }
        new AdholAjax(
            'Tag','GetList',
            {
                parameters : {'sortID' : this.sortID,'flag' : this.flag,'keywords' : keywords,'pageSize' : 10,'pageIndex' : 0},
                onSuccess : function(data){
                    if(data.error)
                    {
                        AMB.addMessage(res.errorMessage,true);
                        return;
                    }
                    o.last_keywords = keywords;
                    tagListDiv.innerHTML = '';
                    if(data.RecordCount == 0) return;
                    var dataList = data.DataList;
                    var ul = document.createElement("ul");
                    for(var i = 0; i < dataList.length; i++)
                    {
                        if(dataList[i].TagName == keywords) continue;
                        var a = document.createElement("a");
                        a.href = "javascript:void(0);";
                        a.onclick = function()
                        {
                            var v = o.value ; 
                            var i = v.lastIndexOf(','); 
                            if(i != -1)
                            {
                                o.value = v.substring(0,i+1) + this.innerText;
                            }
                            else
                            {
                                o.value = this.innerText; 
                            }
                            o.focus(); 
                            var r = o.createTextRange();
                            r.moveStart('character',o.value.length);
                            r.collapse(true);
                            r.select();
                            last_keywords = this.innerText; 
                        };
                        a.innerHTML = "<li>" + dataList[i].TagName + "</li>";
                        ul.appendChild(a);
                    }
                    if(ul.childNodes.length ==0)
                    {
                        tagListDiv.hide();
                        Position.setZIndex();
                        return;
                    }
                    tagListDiv.appendChild(ul);
                    var dimensions = o.getDimensions();
                    var pos = o.positionedOffset();
                    tagListDiv.setStyle(
                        {
                            'left' : pos.left,
                            'top' : pos.top + dimensions.height + 2,
                            'width' : dimensions.width - 2,
                            'zIndex' : 99999
                        });
                    tagListDiv.show();
                    Position.setZIndex(tagListDiv);
                }
            }).execute();
        
    }
});

var Tag = new Tag_Class();

function imageresize(img)
{
    var width = 200;
    if(img.width < width) return;
    if(img.width > 600) img.width = 600;
	img.setStyle({'border' : 0});
	img.onload = null;
    var src = img.src;
    var outerHTML = img.outerHTML;
    img.outerHTML = "<a href='" + src + "' target='_blank'>" + outerHTML + "</a>";
}

function getQueryString(queryStringName)
{
    var returnValue="";
    var URLString=new String(document.location);
    var serachLocation=-1;
    var queryStringLength=queryStringName.length;
    do
    {
        serachLocation=URLString.indexOf(queryStringName+"\=");
        if (serachLocation!=-1)
        {
            if ((URLString.charAt(serachLocation-1)=='?') || (URLString.charAt(serachLocation-1)=='&'))
            {
                URLString=URLString.substr(serachLocation);
                break;
            }
            URLString=URLString.substr(serachLocation+queryStringLength+1);
        }
    }
    while (serachLocation!=-1)
    if (serachLocation!=-1)
    {
        var seperatorLocation=URLString.indexOf("&");
        if (seperatorLocation==-1)
        {
            returnValue=URLString.substr(queryStringLength+1);
        }
        else
        {
            returnValue=URLString.substring(queryStringLength+1,seperatorLocation);
        } 
    }
    return returnValue;
}
