/*
	This note must stay intact.
	
	Author:
		Mattias Rundqvist, Webparts (www.webparts.se)
	License:
		Creative Commons Attribution-Share Alike 3.0 License
		http://creativecommons.org/licenses/by-sa/3.0/
 */

function wp_Cookie( mcfg ) {
	
    var cookie = new Array();
    var cookie_cache = "";
	
    mcfg = mcfg?mcfg:{};
	
    var cfg = {
        expires : mcfg["expires"]?mcfg["expires"]:"",
        expires_unit : mcfg["expires_unit"]?mcfg["expires_unit"]:"minutes",
        path : mcfg["path"]?mcfg["path"]:"/",
        use_local_path : (mcfg["use_local_path"]==true)?true:false,
        domain : mcfg["domain"]?mcfg["domain"]:"",
        secure : (mcfg["secure"]==true)?true:false
    };
	
    if( cfg["use_local_path"] == true )
        cfg["path"] = "";
	
    function calcExpires( expires ) {
	
        if( expires ) {
            var expires_units = {
                years : (365*24*60*60*1000),
                months : (30*24*60*60*1000),
                weeks : (7*24*60*60*1000),
                days : (24*60*60*1000),
                hours : (60*60*1000),
                minutes : (60*1000),
                seconds : (1000)
            };
					
            var now = new Date();
            expires = expires * expires_units[cfg["expires_unit"]];
            expires = new Date( now.getTime() + expires );
        }
        return expires;
    }
	
    function cache() {
	
        // -- Har document.cookie ändrats?
        if( cookie_cache == document.cookie )
            return false;
		
        // -- Töm befintlig information...
        cookie = new Array();
		
        // -- ...och cache'a om...
        cookie_cache = document.cookie;
        var pairs = cookie_cache.split("; ");
        var name="",value="";
		
        for( count = 0; count < pairs.length; count++ ) {
            name = unescape(pairs[count].split("=")[0]);
            if( pairs[count].indexOf("=") != -1 )
                value = unescape(pairs[count].split("=")[1]);
            if( name ) {
                cookie[name] = value;
            }
        }
        return true;
    }
	
    this.length = function() {
        cache();
        var tmp = this.cookies();
        return tmp?tmp.length:0;
    }
	
    this.get = function( name ) {
        cache();
        var value = null;
        if( typeof name != "undefined" ) {
            // -- returnera kakans värde
            if( typeof cookie[name] != "undefined" )
                value = cookie[name];
        }
        return value;
    }
	
    this.cookies = function() {
        cache();
        var value = null;
        // -- returnera namn pĺ alla kakor
        for( name in cookie ) {
		
            if( !value ) {
                value = new Array();
            }
		
            // -- Av nĺgon anledning returneras även prototypes i for-in satser...?
            if( typeof value[name] != "function" )
                value[value.length]=name;
        }
		
        return value;
    }
	
    this.set = function( name, value ) {
	
        // expires, path, domain, secure
        var expires = calcExpires( (typeof arguments[2]!="undefined")?arguments[2]:cfg["expires"] );
        var path = (typeof arguments[3]!="undefined")?arguments[3]:cfg["path"];
        var domain = (typeof arguments[4]!="undefined")?arguments[4]:cfg["domain"];
        var secure = (typeof arguments[5]!="undefined")?arguments[5]:cfg["secure"];
		
        var str_cookie = name + "=" +escape( value ) +
            ( ( expires ) ? ";expires=" + expires.toGMTString() : "" ) + 
            ( ( path ) ? ";path=" + path : "" ) + 
            ( ( domain ) ? ";domain=" + domain : "" ) +
            ( ( secure ) ? ";secure" : "" );
		
        document.cookie = str_cookie;
		
        return true;
    }
	
    this.remove = function( name ) {
		
        if( typeof name == "undefined" ) {
            name = "";
        }
		
        this.set(name,"",-1);
		
        cache();
    }
	
    this.clear = function() {
	
        cache();
        names = this.cookies();
	
        for( count = 0; count < names.length; count++ ) {
            this.set(names[count],"",-1);
        }
        cache();
	
    }
	
    this.test = function() {
		
        if( typeof document.cookie == "undefined" )
            return false;
			
        this.set("test_cookie_name","test_cookie_value");
		
        if( this.get("test_cookie_name")!="test_cookie_value" )
            return false;
			
        this.remove("test_cookie_name");
		
        return true;
    }
	
}