(function(jQuery) {

	jQuery.gtcookie = {
		permanent: {
			attr: function( name, value ) {
				return cookie_attr( 'permanent', name, value );
			},
			removeAttr: function( name ) {
				return cookie_remove_attr( 'permanent', name );
			},
			id: function() {
				return cookie_id( 'permanent' );
			}
		},
		session: {
			attr: function( name, value ) {
				return cookie_attr( 'session', name, value );
			},
			removeAttr: function( name ) {
				return cookie_remove_attr( 'session', name );
			},
			id: function() {
				return cookie_id( 'session' );
			}
		}
	};

	var cookie_name = {
		permanent: 'gt_p',
		session: 'gt_s'
	};

	var cookie_domain = '.' + location.hostname.replace( /[^.]*\.([^:\/]*).*/, "$1" );

	function cookie_id( scope ) {
		if ( typeof scope == 'undefined' || ( scope != 'permanent' && scope != 'session' ) ) {
			return;
		};

		var content = read_cookie( cookie_name[scope] );
	        if ( content == null ) {
			content = write_cookie( scope );
		};

		return extract_id( content );
	};

	function cookie_attr( scope, name, value ) {
		if ( typeof scope == 'undefined' || ( scope != 'permanent' && scope != 'session' ) || typeof name == 'undefined' ) {
			return;
		};

		if ( typeof value == 'undefined' ) {
			return get_cookie_attr( scope, name );
		} else {
			return set_cookie_attr( scope, name, value );
		};
	};

	function cookie_remove_attr( scope, name ) {
		if ( typeof scope == 'undefined' || ( scope != 'permanent' && scope != 'session' ) || typeof name == 'undefined' ) {
			return;
		};

		return set_cookie_attr( scope, name );
	};



//    alert(get_cookie_attr('permanent','updated'));

	function get_cookie_attr( scope, name ) {
		var content = read_cookie( cookie_name[scope] );

		if ( content != null )
		{
			var attr = extract_attributes( content );
			return attr[name];
		};
	};

	function set_cookie_attr( scope, name, value ) {
		var content = read_cookie( cookie_name[scope] );
		var id = null;
		var attr = new Object();
		if ( content != null ) {
			id = extract_id( content );
			attr = extract_attributes( content );
		}
		if ( typeof value == 'undefined' ) {
			delete attr[name];
		} else {
			attr[name] = value;
		};

		return write_cookie( scope, id, attr );
	};

	function read_cookie(name) {
		var nameEQ = name + "=";
		var ca = document.cookie.split(';');
		for(var i=0;i < ca.length;i++) {
			var c = ca[i];
			while (c.charAt(0)==' ') c = c.substring(1,c.length);
			if (c.indexOf(nameEQ) == 0) return unescape(c.substring(nameEQ.length,c.length));
		}
		return null;
	};

	function write_cookie( scope, id, attr ) {
		var days = ( scope == 'session' ) ? 0 : 1825;
		if (days) {
			var date = new Date();
			date.setTime(date.getTime()+(days*24*60*60*1000));
			var expires = date.toGMTString();
		} else {
			var expires = "";
		}
		var id = id || generate_session_id();
		var attr_str = build_attr_str( attr );

		document.cookie = cookie_name[scope] + '=' + id + '|' + attr_str + '; expires=' + expires + '; path=/; domain=' + cookie_domain;

		return id;
	};

	function generate_session_id(){
	        var chars = "abcdef0123456789";
		var pieces = [];
		for( var i = 0; i < 32; i++ ){
			var offset = Math.floor( Math.random() * chars.length );
			pieces.push( chars.substr( offset, 1 ) );
		}
		return pieces.join("");
	};

	function extract_id( content ) {
		var ida = content.split('|',1);
		return ida[0];
	};

	function extract_attributes( content ) {
		var ida = content.split('|');
		var attr = new Object();
		for ( var i = 1; i < ida.length; i++ ) {
			if ( ida[i] != '' ) {
				var attri = ida[i].split(':',2);
				attr[attri[0]] = $.base64Decode( attri[1] );
			};
		};
		return attr;
	};

	function build_attr_str( attr )
	{
		var attr_str = '';
		if ( typeof attr == 'object')
		{
			var attr_array = new Array();
			$.each( attr, function( k, v ) {
				attr_array.push( k + ':' + $.base64Encode( v + '') );
			});
			attr_str = attr_array.join('|');
		}

		return attr_str;
	};


}) (jQuery);

$(document).ready( function() {
	var p_id = $.gtcookie.permanent.id();
	var s_id = $.gtcookie.session.id();
	if ( ! $.gtcookie.permanent.attr('rfts') )
	{
		$.gtcookie.permanent.attr('rf',document.referrer);
		$.gtcookie.permanent.attr('rfts',new Date().getTime());
	};
});


function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}


function setRandomiser() {
	var rand_value = readCookie('gumtree_ab_test_randomiser');
	if (rand_value) {
	        rand_value = parseInt( rand_value );
	}
	else {
	        rand_value = Math.floor(Math.random()*2);
	        createCookie('gumtree_ab_test_randomiser', rand_value , 30);
	}

	return rand_value;
}


function generateSessionId(){
	var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
	var pieces = [];
	for( var i = 0; i < 16; i++ ){
		var offset = Math.floor( Math.random() * chars.length );
		pieces.push( chars.substr( offset, 1 ) );
	}
	return pieces.join("");
}


function getOrCreateSessionId(){
	var name = "statistics";
	var id = readCookie( name );
	if( id == null ){ createCookie( name, generateSessionId(), 0 ); }
	id = readCookie( name );
	return id;
}


function pingCookie() {

	var cookie_value = readCookie('ping_cookie');
	if (cookie_value) {
		eraseCookie('ping_cookie');
		return cookie_value;
	} else {
		return 0
	}
}

