//处理Cookie:
Namespace.register("U.UF.Cookie");

/**
*在www.boomyun.com等其他网站调用www.1473.cn的后台数据时,动态植入js文件,js文件会把1473的cookie带到自己的网站中.实现跨域功能
*在iframe中调用此函数,会把主页的cookie传递到子域, 跨域加载cookie,1473子域用,其他跨域不能用,为了兼容ie6,ie7,暂时未用。
*
* @param  {string} 跨域的url
* @param  {function} 成功记载后的回调函数
*/
U.UF.Cookie.crossDomain = function (url, cb) {
    //跨域的时候由于cookie出现问题
    U.UF.DL.asynLoadJs({ "src": url }, cb);
}

/**
* 设置cookie
*
* @param  {string || object} cookie 字符串或者cookie集合。参见例一,例三。
* 
* @param  {object} cookie 的key
----------path: null, //cookie地址
----------domain: null, //cookie域
----------expires: 365, //cookie过期时间
----------secure: null //cookie来源
* @return  {string}
*例一:U.UF.Cookie.set("usestudiossso=UserId=aa&UserName=zhangsan");net java模式
*例二:U.UF.Cookie.set("15hulianwang=userid=123456&username=zhangsan");net java模式
*例三:U.UF.Cookie.set({15hulianwang:{userid:123456,username:'zhangsan'}});nodejs模式
*/
U.UF.Cookie.set = function (key, att) {
    var i, //循环初始化
        j, //循环初始化
        k = 0, //用于计数
        _cookiestr = ""; //最终的cookie字符串
    //如果key是字符串,则直接设置cookie,如果为集合,则转换为字符串进行处理。
    if (U.UF.C.isString(key)) {//判断设置的是否是字符串 
        _cookiestr = key;
        document.cookie = U.UF.Cookie.setProperty(att, key);
    }
    //用json的方式设置网页的cookie,循环拼接cookie字符串
    else {
        for (i in key) {
            _cookiestr = i + "=";
            for (j in key[i]) {
                //把集合拆分成字符串。
                //如果k>0,则添加&号分割符
                if (k > 0) {
                    _cookiestr += "&";
                }
                _cookiestr += j + "=" + encodeURIComponent(key[i][j]);
                k++;
            }
            //cookie处理
            document.cookie = U.UF.Cookie.setProperty(att, _cookiestr);
        }
    }
    return document.cookie;
}

/**
* 设置指定参数(添加cookie属性)
*
* @param  {object} cookie 的key
----------path: null, //cookie地址
----------domain: null, //cookie域
----------expires: 365, //cookie过期时间
----------secure: null //cookie来源
* @param  {string} 需要写入的cookie usestudio=aa=cc
* @return  {string} 返回写入的cookie值
*/
U.UF.Cookie.setProperty = function (key, val) {
    var i, //循环初始化
        _pj, //记录循环时的键值
        _time, //时间,用户修改时间
        _cookie = {//cookie对象值
            path: "/", //cookie地址
            domain: document.domain, //cookie域
            expires: 365, //cookie过期时间
            secure: null //cookie来源
        };
    //一般不传递第二个参数,这里为空会报错,所以转换为集合
    key = key || {};
    for (i in _cookie) { //循环设置
        //不去找原型,直接找_cookie中定义的变量和方法
        if (i == "expires" && (key[i] || _cookie[i])) { //时间过期处理
            _time = new Date();
            //如果用户设置了时间,则用用户的时间,否则默认过期时间为一年
            var _etime = (key[i] || _cookie[i]) * 24 * 60 * 60 * 1000;
            _time.setTime(_time.getTime() + _etime); //时间变化处理
            key[i] = _time.toUTCString();
        }
        //判断是否设置cookie属性,如果用户不设置,系统默认为null,则不设置,例如secure: null 
        if (key[i] || _cookie[i]) {
            //如果用户设置属性为null,则用系统的,否则用用户设置的属性
            if (key[i] == null) {
                _pj = _cookie[i];
            }
            else {
                _pj = key[i];
            }
            //拼接cookie。
            val += "; " + i + "=" + _pj; //添加cookie
        }
    };
    return val; //返回cookie
}

/**
* 移除cookie(删除)
*
* @param  {string} cookie 的key
* @return  {string}
*/
U.UF.Cookie.del = function (key) {
    var i, //循环初始化
        _array, //分割后的建值数组
        _key = "", //删除指定的cookie
        _cookies = document.cookie.split("; "); //cookie值
    //过滤指定的cookie值
    for (i = 0; i < _cookies.length; i++) {
        _array = _cookies[i].split("=");
        //如果符合用户传递的cookie的key值,则转换为字符串
        if (!key || _array[0] == key) {
            //多cookie情况下,用分号分割,否则不分割
            var _cut = _key.length ? "; " : "";
            _key += _cut + _array[0] + "=";
        }
    }
    //删除指定的cookie
    if (_key) {
        U.UF.Cookie.set(_key, { expires: -1 });
    }
    else {
        console.log("not found cookie!");
    }
}

/**
* 功能:获取用户指定的Cookie值
描述:浏览器cookie形如:"pgv_pvid=3156364456; usestudiosso=userid=72854d28-f45c-48d7-92b7-3cd933e03022&username=13928417148&Loginid=fd02976d-993b-4437-bbd9-5efa99802c8f&userstamp=1364812396; __qc_wId=563; amvid=319501000bca68c1adab006842344f44"
第一步:根据分号拆分成数组.
第二部:按照"="拆分
第三部:找到"usestudiosso",usestudiosso=userid=72854d28-f45c-48d7-92b7-3cd933e03022&username=13928417148&Loginid=fd02976d-993b-4437-bbd9-5efa99802c8f&userstamp=1364812396
第四步:去掉"usestudiosso",得到userid=72854d28-f45c-48d7-92b7-3cd933e03022&username=13928417148&Loginid=fd02976d-993b-4437-bbd9-5efa99802c8f&userstamp=1364812396
参数一:UKY为cookie名字,云端cookie名为:"usestudiosso"
*
* @param  {string} 获取cookie的key对应的值 如usestudio=aa=ff&ss=aa 的usestudio里的 aa=ff&ss=aa
* @param  {string} aa=ff&ss=aa里面的aa对应的值 [ff]
* @return  {string, array} 上述参数里说明返回 
---------第二个参数不存在的时候返回string
---------第二个参数存在的时候返回array
*/
U.UF.Cookie.get = function (key, val) {
    var i, //循环初始化
        _valuearray, //储存字符串的数组
        _value = "", //返回值
        _cookies = document.cookie.split("; "); //从cookie中获取指定的cookie集
    //循环拆分cookie
    for (i = 0; i < _cookies.length; i++) {
        //以“=”的形式拆分成数组
        _valuearray = _cookies[i].split("=");
        //如果找到名为"usestudiosso"的cookie,则
        if (_valuearray[0] == key) {
            _valuearray.splice(0, 1);
            _value = _valuearray.join("=");
            break;
        } //生成指定的Cookie
    }
    if (val) {//从指定的cookie集里获取cookie值
        _cookies = _value.split("&");
        _value = [];
        for (i = 0; i < _cookies.length; i++) {
            _valuearray = _cookies[i].split("=");
            //获取指定的cookie值
            if (_valuearray[0] == val) {
                _value.push(decodeURIComponent(_valuearray[1]));
            }
            //判断是否是指定的cookie存在 
            else if (_valuearray[1] == val) {
                return true;
            }
        }
    }
    return (_value.length ? _value : false);
}