/**
 * Cookie plugin
 *
 * Copyright (c) 2006 Klaus Hartl (stilbuero.de)
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 *
 */

/**
 * Create a cookie with the given name and value and other optional parameters.
 *
 * @example $.cookie('the_cookie', 'the_value');
 * @desc Set the value of a cookie.
 * @example $.cookie('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'jquery.com', secure: true });
 * @desc Create a cookie with all available options.
 * @example $.cookie('the_cookie', 'the_value');
 * @desc Create a session cookie.
 * @example $.cookie('the_cookie', null);
 * @desc Delete a cookie by passing null as value. Keep in mind that you have to use the same path and domain
 *       used when the cookie was set.
 *
 * @param String name The name of the cookie.
 * @param String value The value of the cookie.
 * @param Object options An object literal containing key/value pairs to provide optional cookie attributes.
 * @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object.
 *                             If a negative value is specified (e.g. a date in the past), the cookie will be deleted.
 *                             If set to null or omitted, the cookie will be a session cookie and will not be retained
 *                             when the the browser exits.
 * @option String path The value of the path atribute of the cookie (default: path of page that created the cookie).
 * @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie).
 * @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will
 *                        require a secure protocol (like HTTPS).
 * @type undefined
 *
 * @name $.cookie
 * @cat Plugins/Cookie
 * @author Klaus Hartl/klaus.hartl@stilbuero.de
 */

/**
 * Get the value of a cookie with the given name.
 *
 * @example $.cookie('the_cookie');
 * @desc Get the value of a cookie.
 *
 * @param String name The name of the cookie.
 * @return The value of the cookie.
 * @type String
 *
 * @name $.cookie
 * @cat Plugins/Cookie
 * @author Klaus Hartl/klaus.hartl@stilbuero.de
 */
jQuery.cookie = function(name, value, options) {
    if (typeof value != 'undefined') { // name and value given, set cookie
        options = options || {};
        if (value === null) {
            value = '';
            options.expires = -1;
        }
        var expires = '';
        if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
            var date;
            if (typeof options.expires == 'number') {
                date = new Date();
                date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
            } else {
                date = options.expires;
            }
            expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
        }
        // CAUTION: Needed to parenthesize options.path and options.domain
        // in the following expressions, otherwise they evaluate to undefined
        // in the packed version for some reason...
        var path = options.path ? '; path=' + (options.path) : '';
        var domain = options.domain ? '; domain=' + (options.domain) : '';
        var secure = options.secure ? '; secure' : '';
        document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
    } else { // only name given, get cookie
        var cookieValue = null;
        if (document.cookie && document.cookie != '') {
            var cookies = document.cookie.split(';');
            for (var i = 0; i < cookies.length; i++) {
                var cookie = jQuery.trim(cookies[i]);
                // Does this cookie string begin with the name we want?
                if (cookie.substring(0, name.length + 1) == (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }
};


// how to use
// au = parseUri("http://www.baidu.com/s?wd=sadfwefwef&city=32")
// au.host
// au.queryKey.wd
// au.queryKey.city
//
// parseUri 1.2.2
// (c) Steven Levithan <stevenlevithan.com>
// MIT License

function parseUri (str) {
	var	o   = parseUri.options,
		m   = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
		uri = {},
		i   = 14;

	while (i--) uri[o.key[i]] = m[i] || "";

	uri[o.q.name] = {};
	uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
		if ($1) uri[o.q.name][$1] = $2;
	});

	return uri;
};

parseUri.options = {
	strictMode: false,
	key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
	q:   {
		name:   "queryKey",
		parser: /(?:^|&)([^&=]*)=?([^&]*)/g
	},
	parser: {
		strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
		loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
	}
};

// initliaze
$(document).ready(function(){
    ref = document.referrer
    pui = parseUri(document.location)
    cookie_domain = "." + pui.host.replace("www.","")
    if(!ref) ref = ""
    refuri = parseUri(ref)
    if(refuri.host != "www.alo7.com" && refuri.host != "alo7.com")
        $.cookie("referrer" , ref , {expires: 7, path: '/' , domain: cookie_domain})
    if(!!pui.query){
        if(!pui.query.match(/^[0-9]+$/)){
            $.cookie("query" , pui.query , {expires: 7, path: '/' , domain: cookie_domain})
        }
    }
    });

function get_query_from_uri(){
    pui = parseUri(document.location);
    return pui.query;
}
function get_ainfo_from_cookie(){
    keys = ["referrer" , 'query'];
    ret = {}
    $.each(keys , function(index , key){
        tempv = $.cookie(key);
        if(!!tempv){
           ret[key] = tempv
        }
    })
    return ret
}

function set_passportid_by_home_url(url){
  uri = parseUri(url);
  pid = uri.path.replace(/\//g, "");
  option = { expires: 30,
    path: "/",
    domain: uri.host.replace("home.","")
  };
  $.cookie("passport_id", pid, option);
}

// get user's timezone
function get_user_timezone(){
  var dt = new Date();
  var localZone =  - dt.getTimezoneOffset()/60;
  //$.get("/version.txt" , {'type':'utz' , 'utz':localZone, 'utzs':dt.toString()})
  return localZone;
}

function multi_utils_call(params_hash){
  var query_string = "";
  for(var funname in params_hash){
    query_string += ("fun[]=" + funname + "&");
  }
  $.ajax({ url: "/utils.php?" + query_string +"time=" + (new Date().getTime()), async: false, dataType: 'json', success: function(data) {
      for(var returnkey in data){
        var callbackfun = params_hash[returnkey];
          if(!!callbackfun){
             var callback_params = data[returnkey];
             callbackfun(callback_params);
          }
      }
  }});
}
// check server status ---------
var is_server_ok = true;
function set_is_server_ok(hash_params){
  is_server_ok = hash_params["is_ok"];
}
function get_is_server_ok(){
  return is_server_ok;
}

// check middle night -------
var middle_night_in_cst = false;
function set_middle_night_in_cst(boolean_params){
  middle_night_in_cst = boolean_params;
}

function check_middle_night_in_cst(){
  //if not cst +8 timezone , always false
  if(get_user_timezone() != 8) return false;
  return middle_night_in_cst;
}

