function Cookie(){
    var name, value, expires, path="/", domain, secure=false;
    this.setName = function(sName){ name=sName; }
    this.getName = function(){ return name; }
    this.getValue = function(){ 
        return unescape(
            (value instanceof Array)?
                value.join("&"):
                value
        );
    }

    this.setValue = function(sValue){ value=escape(sValue); }
    this.add = function(key, val){
        if(!(value instanceof Array)){
            var temp = value;
            value = [];
            if(temp){
                value[value.length] = temp;
            }
        }
        value[value.length] = key+"="+escape(val);
    }
    this.setExpires = function(date){ expires=date; }
    this.getExpires = function(){ return expires; }
    this.setDomain = function(sD){ domain=sD; }
    this.getDomain = function(){ return domain; }
    this.setSecure = function(scr){ secure = !!scr; }
    this.getSecure = function(){ return secure; }
    this.save = function(){
        if(name  && value){
            if(value instanceof Array){
                // if the value is as array, we join the array
                value=value.join("&");
            }
            document.cookie = name+'='+escape( value ) +
                ( ( expires ) ? ';expires='+expires.toGMTString() : '' ) + //expires.toGMTString()
                ( ( path ) ? ';path=' + path : '' ) +
                ( ( domain ) ? ';domain=' + domain : '' ) +
                ( ( secure ) ? ';secure' : '' );
        }
    }
    this.remove = function(){
        // The cookie removed if the expires date is before today
        expires = new Date(new Date().getTime()-1000*60*60*24);
        this.save();
    }
};

Cookie.get = function(name){
    /*
        the document.cookie return a string contains all the cookies available in the browser for the specific domain in format of: Name=Value;Name=Value;Name=Value
        this function take only the cookie with the requested name and return a Cookie object with it's value.
        if there isn't a cookie with the requested name, the function returns an empty cookie object with the requested name
    */
    var start = document.cookie.indexOf( name + "=" );
    var len = start + name.length + 1;
    var cookie = new Cookie();
    if ( !((( !start ) && ( name != document.cookie.substring( 0, name.length ) )) || (start==-1) ) ) {
        var end = document.cookie.indexOf( ';', len );
        if ( end == -1 ) end = document.cookie.length;
        cookie.setValue(unescape( document.cookie.substring( len, end ) ));
        
        cookie.setName(name);
        return cookie;
    }
    
    return null;    
}