﻿//http://www.codeproject.com/KB/scripting/jsnamespaces.aspx?display=Print
var Namespace =
{
    Register : function(_Name)
    {
        var chk = false;
        var cob = "";
        var spc = _Name.split(".");
        for(var i = 0; i<spc.length; i++)
        {
            if(cob!=""){cob+=".";}
            cob+=spc[i];
            chk = this.Exists(cob);
            if(!chk){this.Create(cob);}
        }
        if(chk){ throw "Namespace: " + _Name + " is already defined."; }
    },

    Create : function(_Src)
    {
        eval("window." + _Src + " = new Object();");
    },

    Exists : function(_Src)
    {
        eval("var NE = false; try{if(" + _Src + "){NE = true;}else{NE = false;}}catch(err){NE=false;}");
        return NE;
    }
}
Namespace.Register('Utils');

Utils.RegEx={
    Email:/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/
}
Utils.Cookie = {
    getByName: function(check_name) {
        var a_all_cookies = document.cookie.split(';');
        var a_temp_cookie = '';
        var cookie_name = '';
        var cookie_value = '';
        var b_cookie_found = false; // set boolean t/f default f	
        for (i = 0; i < a_all_cookies.length; i++) {
            a_temp_cookie = a_all_cookies[i].split('=');
            cookie_name = a_temp_cookie[0].replace(/^\s+|\s+$/g, '');
            if (cookie_name == check_name) {
                b_cookie_found = true;
                if (a_temp_cookie.length > 1) {
                    cookie_value = unescape(a_temp_cookie[1].replace(/^\s+|\s+$/g, ''));
                }
                return cookie_value;
                break;
            }
            a_temp_cookie = null;
            cookie_name = '';
        }
        if (!b_cookie_found) {
            return null;
        }

    },
    SetCookie: function(cookieName, cookieValue, nDays) {
        var _reg = /^\d{1,}$/;
        if (!_reg.test(nDays)) nDays = 0;
        if (nDays == null || nDays == 0) {
            document.cookie = cookieName + "=" + escape(cookieValue);
            return;
        }
        var today = new Date();
        var expire = new Date();
        if (nDays == null || nDays == 0) nDays = 1;
        expire.setTime(today.getTime() + 3600000 * 24 * nDays);
        document.cookie = cookieName + "=" + escape(cookieValue)
                         + ";expires=" + expire.toGMTString();
    },
    setCookie: function(key, value) {
        document.cookie = key + "=" + escape(value);
    }
}
Utils.Request={
    querystring:function(key){
        return this.queryParam(window.location.search.substring(1),key);
    },
    queryParam:function(href,key){
        var _query=href.toLowerCase();
        var params=_query.split('&');
        for(var i=0;i<params.length;i++){
            var pair=params[i].split('=');
            if(pair[0]==key.toLowerCase()) return pair[1];
        }
        return false;
        
    }
}
Utils.Ajax = {
    AsyncPost:function(url,data,clientCallback){
        var xmlhttp=false;
        for(var i=0;i<1;i++){
            try{xmlhttp=new ActiveXObject('Msxml2.XMLHTTP');break;}catch(e){}
            try{xmlhttp=new ActiveXObject('Microsoft.XMLHTTP');break;}catch(e){}
            try{xmlhttp=new XMLHttpRequest();break;}catch(e){}                         
        }
        if(xmlhttp){
            xmlhttp.open('POST',url,true);
            xmlhttp.setRequestHeader("Accept-charset","utf-8");                
            xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
            
            xmlhttp.onreadystatechange=function(){
                if(xmlhttp.readyState==4) clientCallback(xmlhttp.responseText);
            }
            xmlhttp.send(data);
        }       
    }
}
Utils.Position = {
    // Safari returns margins on body which is incorrect if the child is absolutely
    // positioned.  For performance reasons, redefine Position.cumulativeOffset for
    // KHTML/WebKit only.(se prototype)
    center: function(width, height, win) {
        var _window = win ? win : window;
        var _scrollXY = this.scrollXY(_window);
        var _viewport = this.viewport(_window);
        /*
        var _x = ((this.clientWidth(_window) - width) / 2) + this.scrollLeft(_window);
        var _y = ((this.clientHeight(_window) - height) / 2) + this.scrollTop(_window);
        */
        var _x = (_viewport[0] - width) / 2 + _scrollXY[0];
        var _y = (_viewport[1] - height) / 2 + _scrollXY[1];
        return [_x, _y];
    },    
    cumulativeOffset: function(element) {
        var valueT = 0, valueL = 0;
        do {
            valueT += element.offsetTop || 0;
            valueL += element.offsetLeft || 0;
            element = element.offsetParent;
        } while (element);
        return [valueL, valueT];
    },
    scrollXY: function(targetWin) {
        if (typeof targetWin.pageYOffset != 'undefined') return [targetWin.pageXOffset, targetWin.pageYOffset];
        if (targetWin.document.body.scrollLeft) return [targetWin.document.body.scrollLeft, targetWin.document.body.scrollTop];
        return [targetWin.document.documentElement.scrollLeft, targetWin.document.documentElement.scrollTop];
    },
    viewport: function(targetWin) {
        if (typeof targetWin.innerWidth != 'undefined') return [targetWin.innerWidth, targetWin.innerHeight];
        if (typeof targetWin.document.documentElement != 'undefined' &&
                typeof targetWin.document.documentElement.clientWidth != 'undefined' &&
                targetWin.document.documentElement.clientWidth != 0)
            return [targetWin.document.documentElement.clientWidth, targetWin.document.documentElement.clientHeight];
        return [targetWin.document.body.clientWidth, targetWin.document.body.clientHeight];
    }
}

