// aglib
// Copyright (c) 2006, Agyou corporation
function JSONSocket() 
{
	this.m_protocol  = {tsldchk: null, data:null};
	this.m_busy      = false;
	this.m_scriptTag = null;
	
	this.clear = TSSOCKclear;
	function TSSOCKclear() {
		this.m_protocol  = {tsldchk: null, data:null};
	}

	this.isComplete = TSSOCKisDonwloadComplete;
	function TSSOCKisDonwloadComplete() {
		if (this.m_protocol.tsldchk) return true;
		return false;
	}

	this.isBusy = TSSOCKisBusy;
	function TSSOCKisBusy() {
		return this.m_busy;
	}
	
	this.setBusy = TSSOCKsetBusy;
	function TSSOCKsetBusy(bBusy) {
		this.m_busy = bBusy;
	}
	
	this.removeTag = TSSOCKremoveTag;
	function TSSOCKremoveTag(bBusy) {
		if (this.m_scriptTag) {
			this.m_scriptTag.parentNode.removeChild(this.m_scriptTag);
			this.m_scriptTag = null;
		}
	}
}

var g_tsJSONSocket = Array(16);
for (i = 0; i < 16; i++) {
	g_tsJSONSocket[i] = new JSONSocket();
}

var g_tsJSONPHandle;
var g_tsMsg = [];

AGL = {};

AGL.ASyncJSON = function(dataid) {
	this.m_dataid = dataid;
	
	this.waitJSON = waitJSON;
	function waitJSON(dataid,func) {
		var check = 0;
		try{
			if (g_tsJSONSocket[dataid].isComplete()) {check=1;}
		}catch(e){
			var f = function(){waitJSON(dataid,func)};
			setTimeout(f,100);
			return;
		}
		if(check){
			func(g_tsJSONSocket[dataid].m_protocol);
			g_tsJSONSocket[dataid].setBusy(false);
		}else{
			var f = function(){waitJSON(dataid,func)};
			setTimeout(f,100);
		}
	}

	//busy
	function waitBusy(dataid, tmpID, src, loadfunc) {
		if (g_tsJSONSocket[dataid].isBusy()) {
			var f = function(){waitBusy(dataid, tmpID, src, loadfunc)};
			setTimeout(f,100);
		} else {
			loadfunc();
		}
	}

	//async load script
	this.loadJSON = loadJSON;
	function loadJSON(tmpID, src, func)
	{
		var datid = this.m_dataid;
		var loadfc = function() {

			var url;
			var todaymillisec = (new Date()).getTime();
			if (src.indexOf('?') >= 0) {
				url = src+'&num='+todaymillisec;
			} else {
				url = src+'?num='+todaymillisec;
			}
		
			g_tsJSONSocket[datid].clear();
			g_tsJSONSocket[datid].setBusy(true);
			g_tsJSONSocket[datid].removeTag();

			if (AGL.checkBrowser() == "op") {
				var img = document.createElement("img"); 
				img.onerror = function(e){ 
					g_tsJSONSocket[datid].m_scriptTag = document.createElement("script");
					g_tsJSONSocket[datid].m_scriptTag.type = "text/javascript"; 
					g_tsJSONSocket[datid].m_scriptTag.src = url;
					g_tsJSONSocket[datid].m_scriptTag.charset = "UTF-8";
					document.getElementById(tmpID).appendChild(g_tsJSONSocket[datid].m_scriptTag);
				}; 
				img.width = 0; 
				img.height = 0; 
				img.src = url; 
				document.body.appendChild(img);
			} else {
				g_tsJSONSocket[datid].m_scriptTag = document.createElement("script");
				g_tsJSONSocket[datid].m_scriptTag.type = "text/javascript"; 
				g_tsJSONSocket[datid].m_scriptTag.src = url;
				g_tsJSONSocket[datid].m_scriptTag.charset = "UTF-8";
				document.getElementById(tmpID).appendChild(g_tsJSONSocket[datid].m_scriptTag);
			}
			waitJSON(datid, func);
		};
		
		waitBusy(datid, tmpID, src, loadfc);
	}
	
	this.clear = clearJSON;
	function clearJSON(){
		var datid = this.m_dataid;
		g_tsJSONSocket[datid].removeTag();
	}
};

AGL.JSONP_IM = function(tmpID, url) {
	var todaymillisec = (new Date()).getTime();
	if (url.indexOf('?') >= 0) {
		url = url+'&num='+todaymillisec;
	} else {
		url = url+'?num='+todaymillisec;
	}

	if (AGL.checkBrowser() == "op") {
		var img = document.createElement("img"); 
		img.onerror = function(e){ 
			g_tsJSONSocket[datid].m_scriptTag = document.createElement("script");
			g_tsJSONSocket[datid].m_scriptTag.type = "text/javascript"; 
			g_tsJSONSocket[datid].m_scriptTag.src = url;
			g_tsJSONSocket[datid].m_scriptTag.charset = "UTF-8";
			document.getElementById(tmpID).appendChild(g_tsJSONSocket[datid].m_scriptTag);
		}; 
		img.width = 0; 
		img.height = 0; 
		img.src = url; 
		document.body.appendChild(img);
	} else {
		scriptTag = document.createElement("script");
		scriptTag.type = "text/javascript"; 
		scriptTag.src = url;
		scriptTag.charset = "UTF-8";
		document.getElementById(tmpID).appendChild(scriptTag);
	}
}

AGL.JSONP = function(tmpID, url) {

	var todaymillisec = (new Date()).getTime();
	if (url.indexOf('?') >= 0) {
		url = url+'&num='+todaymillisec;
	} else {
		url = url+'?num='+todaymillisec;
	}

	var msg = new Object();
	msg.tmpID = tmpID;
	msg.url   = url;

	if ((msg.url).indexOf('leave') >=0 ) {
		if (AGL.checkBrowser() == "op") {
			var img = document.createElement("img"); 
			img.onerror = function(e){ 
				for (var datid = 0; datid < 16; datid++) {
					g_tsJSONSocket[datid].m_scriptTag = document.createElement("script");
					g_tsJSONSocket[datid].m_scriptTag.type = "text/javascript"; 
					g_tsJSONSocket[datid].m_scriptTag.src = msg.url;
					g_tsJSONSocket[datid].m_scriptTag.charset = "UTF-8";
					document.getElementById(msg.tmpID).appendChild(g_tsJSONSocket[datid].m_scriptTag);
					if(g_tsJSONSocket[datid].m_scriptTag != null) break;
				}
			}; 
			img.width = 0; 
			img.height = 0; 
			img.src = url;
			
			
			document.body.appendChild(img);
		} else {
		
			scriptTag = document.createElement("script");
			scriptTag.type = "text/javascript"; 
			scriptTag.src = msg.url;
			scriptTag.charset = "UTF-8";
			document.getElementById(msg.tmpID).appendChild(scriptTag);
		}
	} else {
		g_tsMsg.push(msg);
	}
}

AGL.InitJSONP = function() {
	g_tsJSONPHandle = setInterval("AGL.message()", 500);
}

AGL.message = function() {
	if(g_tsMsg.length) {
		var msg = g_tsMsg.shift();
		
		var text = '';
		if (AGL.checkBrowser() == "op") {
			var img = document.createElement("img"); 
			img.onerror = function(e){
				for (var datid = 0; datid < 16; datid++) {
					g_tsJSONSocket[datid].m_scriptTag = document.createElement("script");
					g_tsJSONSocket[datid].m_scriptTag.type = "text/javascript"; 
					g_tsJSONSocket[datid].m_scriptTag.src = msg.url;
					g_tsJSONSocket[datid].m_scriptTag.charset = "UTF-8";
					document.getElementById(msg.tmpID).appendChild(g_tsJSONSocket[datid].m_scriptTag);
					if(g_tsJSONSocket[datid].m_scriptTag != null) break;
				}
			}; 
			img.width = 0; 
			img.height = 0;
			img.src = msg.url;
			//alert(img.src);
			
			document.body.appendChild(img);
		} else {
			scriptTag = document.createElement("script");
			scriptTag.type = "text/javascript"; 
			scriptTag.src = msg.url;
			scriptTag.charset = "UTF-8";
			document.getElementById(msg.tmpID).appendChild(scriptTag);
			
		}
	}
}

//BrowserCheck
AGL.checkBrowser = function(){
	if(window.opera){
		return 'op';
	} else if(document.layers) {
		return 'nn';
	} else if(document.getElementById){
		if(window.ActiveXObject){
			return 'ie5';
		}else{
			return 'ff';
		}
	} else if(document.all){
		return 'ie4';
	}
};

//Encode
AGL.encodeSTR = function(str) {
	var moji;
	var uni = "";
	for( var i=0;i<str.length;i++){
		moji = str.charCodeAt(i);
		if(moji <= 255){
			if(moji <=15){
				uni = uni + "%0" + moji.toString(16);
			} else if(moji >=48 && moji <=57){
				uni = uni + str.charAt(i);
			} else if(moji >=65 && moji <=90){
				uni = uni + str.charAt(i);
			} else if(moji >=97 && moji <=122){
				uni = uni + str.charAt(i);
			} else {
				uni = uni + "%" + moji.toString(16);
			}
		} else {
			uni = uni + "%u" + moji.toString(16);
		}
	}
	return uni;
};

//Decode
AGL.decodeSTR = function(s){
	var seq = "";
	var abc = "";
	var uni = "";
	
   str1 = "012345";
    str2 = str1.charAt(2);      // "2"
    str3 = str1.substring(2,4); // "23"
    
    for (var i = 0; i < s.length;) {
    	var c = s.charAt(i);
    	if (c == '%') {
    		if (s.charAt(i+1) == 'u') {
				uni = s.substr(i+2,4);
				seq += String.fromCharCode(parseInt(uni,16));
				i += 6;
    		} else {
				abc = s.substr(i+1,2);
    			seq += String.fromCharCode(parseInt(abc,16));
    			i+=3;
    		}
    	} else {
    		seq += c;
    		i++;
    	}
    }
	return seq;
};

//Set Cookie
AGL.setCookie = function(key,val){
    tmp = key+"="+escape(val)+";";
    tmp += "expires=Fri, 31-Dec-2030 23:59:59;";
    document.cookie = tmp;
};

//Get Cookie
AGL.getCookie = function(key) {
    tmp = document.cookie+";";
    tmp1 = tmp.indexOf(key,0);
    if(tmp1 != -1){
        tmp = tmp.substring(tmp1,tmp.length);
        start = tmp.indexOf("=",0);
        end = tmp.indexOf(";",start);
        return(unescape(tmp.substring(start+1,end)));
    }
    return("");
};

//Delete Cookie
AGL.delCookie = function(key){
    expiredate = new Date();
    expiredate.setYear(expiredate.getYear()-1);
    tmp = key+"=;";
    tmp += "expires="+expiredate.toGMTString();
    document.cookie = tmp;
};

//Get Pase Size
AGL.getPageSize = function()
{
	var w = document.body.clientWidth;
	var h = document.body.clientHeight;
	if (w < document.body.scrollWidth) {
		w = document.body.scrollWidth;
	}
	if (h < document.body.scrollHeight) {
		h = document.body.scrollHeight;
	}
	var ret = {cx: w, cy: h};
	return ret;
};

//Get Client Size
AGL.getClientSize = function()
{
	var browser = AGL.checkBrowser();
	if (AGL.checkBrowser() == "ie4" || AGL.checkBrowser() == "ie5" || AGL.checkBrowser() == "ie6") {
		var w = document.documentElement.clientWidth;
		var h = document.documentElement.clientHeight;
		
		if (w == 0) {
			w = document.body.clientWidth;
		}
		if (h == 0) {
			h = document.body.clientHeight;
		}
		var ret = {cx: w, cy: h};
		return ret;
	} else {
		var w = window.innerWidth;
		var h = window.innerHeight;
		w = w - 20;
		h = h - 0;
		var ret = {cx: w, cy: h};
		return ret;
	}
	var ret = {cx: 0, cy: 0};
	return ret;
};

//Get Scroll Pos
AGL.getScrollPos = function()
{
	var browser = AGL.checkBrowser();
	if (AGL.checkBrowser() == "ie4" || AGL.checkBrowser() == "ie5" || AGL.checkBrowser() == "ie6") {
		var x = document.body.scrollLeft;
		var y = document.body.scrollTop;
		var ret = {cx: x, cy: y};
		return ret;
	} else {
		var x = window.pageXOffset;
		var y = window.pageYOffset;
		var ret = {cx: x, cy: y};
		return ret;
	}
	var ret = {cx: 0, cy: 0};
	return ret;
};

AGL.DOM = {};

AGL.DOM.append = function(a, b) {
    b.appendChild(AGL.DOM.toNode(a, b));
};

AGL.DOM.insert = function(a, b) {
    b.parentNode.insertBefore(AGL.DOM.toNode(a, b), b);
};

AGL.DOM.replace = function(a, b) {
    b.parentNode.replaceChild(AGL.DOM.toNode(a, b), b);
};

AGL.DOM.remove = function(a) {
    a.parentNode.removeChild(a);
};

AGL.DOM.toNode = function(a, b) {
    return typeof a == 'string' ? b.ownerDocument.createTextNode(a) : a;
};

AGL.DOM.dom2obj = function(dom, config) {
    var meta = config ? config.addMetaProperty :
        AGL.DOM.dom2obj.addMetaProperty;
    switch (dom.nodeType) {
    case 1:
        var obj = {};
        if (meta)
            obj.$key = AGL.DOM.nodeName(dom);
        var attrs = AGL.DOM.attrs(dom);
        for (var name in attrs)
            obj['@' + name] = attrs[name];
        if (AGL.DOM.isHTMLDocument(dom.ownerDocument) &&
            AGL.DOM.nodeName(dom) == 'textarea') {
            obj['textarea'] = dom.value;
            return obj;
        }
        switch (dom.childNodes.length) {
        case 0:
            obj[AGL.DOM.nodeName(dom)] = null;
            break;
        case 1:
            obj[AGL.DOM.nodeName(dom)] =
                AGL.DOM.dom2obj(dom.firstChild, config);
            break;
        default:
            var ary = [], content = {};
            for (var child = dom.firstChild; child;
                 child = child.nextSibling) {
                var tmp = AGL.DOM.dom2obj(child, config);
                ary.push(tmp);
                if (child.nodeType == 1) {
                    var tag = AGL.DOM.nodeName(child);
                    if (tag in content == false)
                        content[tag] = [];
                    content[tag].push(tmp[tag]);
                }
            }
            for (var name in content)
                ary[name] = content[name].length == 1 ?
                    content[name][0] : content[name];
            obj[AGL.DOM.nodeName(dom)] = ary;
        }
        return obj;
    case 3:
        return dom.data;
    case 4:
        var obj = {'#cdata-section': dom.data};
        if (meta)
            obj.$key = '#cdata-section';
        return obj;
    case 7:
        var obj = {};
        obj['?' + dom.target] = dom.data;
        if (meta)
            obj.$key = '?' + dom.target;
        return obj;
    case 8:
        var obj = {'#comment': dom.data};
        if (meta)
            obj.$key = '#comment';
        return obj;
    }
};

AGL.DOM.obj2dom = function(obj, config) {
    if (AGL.debug && arguments[2] == null)
        AGL.findCircularReference(obj);
    var doc = config ? config.document : AGL.DOM.obj2dom.document;
    if (typeof obj == 'object') {
        if (obj instanceof Array) {
            var fragment = doc.createDocumentFragment();
            for (var i = 0; i < obj.length; ++i)
                fragment.appendChild(AGL.DOM.obj2dom(obj[i], config, true));
            return fragment;
        } else {
            if ('#cdata-section' in obj)
                return doc.createCDATASection(obj['#cdata-section']);
            if ('#comment' in obj)
                return doc.createComment(obj['#comment']);
            var tag, content, attrs = {};
            for (var name in obj)
                if (name.charAt(0) == '@')
                    attrs[name.substring(1)] = obj[name];
                else if (name.charAt(0) == '?')
                    return doc.createProcessingInstruction(name.substring(1),
                                                           obj[name]);
                else {
                    tag = name;
                    content = obj[name];
                }
            var elem = AGL.DOM.create(tag, attrs, doc);
            if (content != null)
                elem.appendChild(AGL.DOM.obj2dom(content, config, true));
            return elem;
        }
    } else {
        return doc.createTextNode(obj);
    }
};

AGL.DOM.obj2dom.document = document;

AGL.DOM.dom2text = function(dom) {
    switch (dom.nodeType) {
    case 1:
        var text = '<' + AGL.DOM.nodeName(dom);
        var attrs = AGL.DOM.attrs(dom);
        for (var name in attrs)
            text += ' ' + name + '="' + AGL.DOM.escape(attrs[name]) + '"';
        if (AGL.DOM.isHTMLDocument(dom.ownerDocument) &&
            AGL.DOM.nodeName(dom) == 'textarea') {
            text += '>' + AGL.DOM.escape(dom.value) + '</textarea>';
            return text;
        }
        if (dom.hasChildNodes()) {
            text += '>';
            for (var child = dom.firstChild; child; child = child.nextSibling)
                text += AGL.DOM.dom2text(child);
            text += '</' + AGL.DOM.nodeName(dom) + '>';
        } else
            text += '/>';
        return text;
    case 3:
        return AGL.DOM.escape(dom.data);
    case 4:
        return '<![CDATA[' + dom.data + ']]>';
    case 7:
        return '<?' + dom.target + ' ' + dom.data + '?>';
    case 8:
        return '<!--' + dom.data + '-->';
    }
};

AGL.DOM.obj2text = function(obj) {
    if (AGL.debug && arguments[1] == null)
        AGL.findCircularReference(obj);
    if (typeof obj == 'object') {
        if (obj instanceof Array) {
            var text = '';
            for (var i = 0; i < obj.length; ++i)
                text += AGL.DOM.obj2text(obj[i], true);
            return text;
        } else {
            if ('#cdata-section' in obj)
                return '<![CDATA[' + obj['#cdata-section'] + ']]>';
            if ('#comment' in obj)
                return '<!--' + obj['#comment'] + '-->';
            var tag, attrs = '';
            for (var name in obj)
                if (name.charAt(0) == '@')
                    attrs += ' ' + name.substring(1) + '="' +
                        AGL.DOM.escape(obj[name]) + '"';
                else if (name.charAt(0) == '?')
                    return '<' + name + ' ' + obj[name] + '?>';
                else
                    tag = name;
            if (obj[tag] == null)
                return '<' + tag + attrs + '/>';
            else
                return '<' + tag + attrs + '>' +
                    AGL.DOM.obj2text(obj[tag], true) + '</' + tag + '>';
        }
    } else
        return AGL.DOM.escape(obj);
};

AGL.DOM.text2dom = function(text) {
    var xmldoc;
    if (typeof DOMParser != 'undefined')
        xmldoc = new DOMParser().parseFromString(text, 'text/xml');
    else {
        xmldoc = document.implementation.createDocument ?
            document.implementation.createDocument('', '', null) :
                new ActiveXObject('Microsoft.XMLDOM');
        xmldoc.loadXML(text);
    }
    return xmldoc.documentElement;
};

AGL.DOM.attrs = function(elem) {
    var attrs = {};
    for (var i = 0; i < elem.attributes.length; ++i) {
        var attr = elem.attributes[i];
        if (attr.specified) {
            var name = AGL.DOM.nodeName(attr);
            attrs[name] = attr.value;
            if (attr.name == 'style' &&
                elem.getAttribute('style') == elem.style)
                attrs.style = elem.style.cssText;
            if (AGL.DOM.isHTMLDocument(elem.ownerDocument) &&
                AGL.DOM.booleanAttribute[name])
                attrs[name] = name;
        }
    }
    if (AGL.DOM.isHTMLDocument(elem.ownerDocument))
        switch (AGL.DOM.nodeName(elem)) {
        case 'input':
            attrs.value = elem.value;
            attrs.type = elem.type;
            if (elem.type == 'radio' || elem.type == 'checkbox')
                if (elem.checked)
                    attrs.checked = 'checked';
                else
                    delete attrs.checked;
            if (elem.type == 'file')
                delete attrs['html:value'];
            break;
        case 'option':
            if (elem.selected)
                attrs.selected = 'selected';
            else
                delete attrs.selected;
            break;
        case 'button':
            attrs.type = elem.type;
            break;
        }
    return attrs;
};

AGL.DOM.booleanAttribute = {
    compact: true, declare: true, defer: true, disabled: true,
    ismap: true, multiple: true, nohref: true, noresize: true,
    noshade: true, nowrap: true, readonly: true
};

AGL.DOM.create = function(name, data, document) {
    if (!document)
        document = AGL.DOM.create.document;
    if (typeof data == 'object') {
        var elem, tag = name, attrs = data;
        if (typeof ActiveXObject == 'function' &&
            AGL.DOM.isHTMLDocument(document)) {
            for (var name in attrs)
                tag += ' ' + name + '="' +
                    AGL.DOM.escape(attrs[name]) + '"';
            elem = document.createElement('<' + tag + '>');
        } else {
            elem = document.createElement(tag);
            for (var name in attrs)
                elem.setAttribute(name, attrs[name]);
        }
        return elem;
    } else if (name == '#comment')
        return document.createComment(data);
    else if (name == '#cdata-section')
        return document.createCDATASection(data);
    else if (name.charAt(0) == '?')
        return document.createProcessingInstruction(name.substring(1), data);
};

AGL.DOM.create.document = document;

AGL.DOM.nodeName = function(node) {
    return AGL.DOM.isHTMLDocument(node.ownerDocument) ?
        node.nodeName.toLowerCase() : node.nodeName;
};

AGL.DOM.isHTMLDocument = function(document) {
    return 'body' in document;
};

AGL.DOM.escape = function(obj) {
    return obj.toString().replace(/[<>&\"]/g, function(c) {
        return {'<': '&lt;', '>': '&gt;', '&': '&amp;', '"': '&quot;'}[c];
    });
};

AGL.Event = {
    add: function(node, type, handler) {
        var index = AGL.Event.holder.length;
        var listener = AGL.Event.createListener(index);
        if (node.addEventListener)
            node.addEventListener(type, listener, false);
        else if (node.attachEvent)
            node.attachEvent('on' + type, listener);
        AGL.Event.holder.push([node, type, handler, listener]);
    },
    remove: function(node, type, handler) {
        for (var i = 0; i < AGL.Event.holder.length; ++i) {
            var ary = AGL.Event.holder[i];
            if (ary && ary[0] == node && ary[1] == type && ary[2] == handler) {
                if (node.removeEventListener)
                    node.removeEventListener(type, ary[3], false);
                else if (node.detachEvent)
                    node.detachEvent('on' + type, ary[3]);
                AGL.Event.holder[i] = null;
                break;
            }
        }
    },
    createListener: function(index) {
        return function(event) {
            var node = AGL.Event.holder[index][0];
            var type = AGL.Event.holder[index][1];
            var handler = AGL.Event.holder[index][2];
            if (typeof ActiveXObject == 'function') {
                var expando = document.expando;
                document.expando = true;
                event.target = event.srcElement || document;
                event.currentTarget = node;
                event.stopPropagation = AGL.Event.stopPropagation;
                event.preventDefault = AGL.Event.preventDefault;
                var elem = document.compatMode == 'CSS1Compat' ?
                    document.documentElement : document.body;
                event.pageX = event.clientX + elem.scrollLeft;
                event.pageY = event.clientY + elem.scrollTop;
                if (type == 'mouseover')
                    event.relatedTarget = event.fromElement;
                else if (type == 'mouseout')
                    event.relatedTarget = event.toElement;
                document.expando = expando;
            }
            handler.call(node, event);
        };
    },
    stopPropagation: function() {
        window.event.cancelBubble = true;
    },
    preventDefault: function() {
        window.event.returnValue = false;
    },
    holder: []
};



AGL.createError = function(message) {
    var error = new Error;
    error.name = 'AGLError';
    error.message = message;
    return error;
};

AGL.findCircularReference = function(obj, stack) {
    if (stack == null)
        stack = [];
    if (typeof obj == 'object' && obj != null) {
        for (var i = 0; i < stack.length; ++i)
            if (stack[i] == obj)
                throw AGL.createError('circular reference is found');
        stack.push(obj);
        if (obj instanceof Array)
            for (var i = 0; i < obj.length; ++i)
                AGL.findCircularReference(obj[i], stack);
        else
            for (var key in obj)
                AGL.findCircularReference(obj[key], stack);
        stack.pop();
    }
};

AGL.absOffsetR = function(el) {
	if(el.offsetParent.tagName.toLowerCase()=="body"){
		return {cx:el.offsetLeft, cy:el.offsetTop};
	}else{
		pos = AGL.absOffsetR(el.offsetParent);
		return {cx:el.offsetLeft+pos.cx, cy: el.offsetTop+pos.cy};
	}
}

AGL.absOffset = function(el){
	if(el.offsetParent.tagName.toLowerCase()=="body"){
		return {cx:el.offsetLeft, cy:el.offsetTop};
	}else {
		return AGL.absOffsetR(el);
	}
}

//Binding
function bind(method, receiver) {
    return function() {
        return method.apply(receiver, arguments);
    };
}

//EventCancel
function CancelEvent()
{
	AGL.Event.preventDefault();
	return false;
}
