// WasaScripts
// 
// Scripts created by Wasabi Analytics
// Copyright (c) Wasabi Analytics and others (see below)

function getCustomVarById(cvid) {
	var global_re = new RegExp(';?__utmv=([^\\|]+\\|)([^;]*);?') ;	
	var match = global_re.exec(document.cookie) ;

	if (!match) {
		return null ;
	}

	var variables = match[2].split(/,/) ;

	for (var loop=0; loop<variables.length; ++loop) {
		var parts = variables[loop].split(/=/) ;

		if ( (parts.length) && (parts[0] == cvid) ) {
			return [ unescape(parts[0]), unescape(parts[1]), unescape(parts[2]) ] ;
		}
	}

       	return null ;
}

function CustomVarsToGACVH() {
    var gacvh = new Object() ;
    var global_re = new RegExp(';? ?__utmv=([^\\|]+)\\|([^;]*);?') ;	
    var match = global_re.exec(document.cookie) ;

    if (!match) {
	return null ;
    }

    gacvh['head'] = match[1] ;
    
    var variables = match[2].split(/,/) ;

    for (var loop=0; loop<variables.length; ++loop) {
	var parts = variables[loop].split(/=/) ;

	gacvh[ 'cv' + unescape(parts[0]) ]  = [ unescape(parts[0]), unescape(parts[1]), unescape(parts[2]), unescape(parts[3]) ] ;
    }

    return gacvh ;
}

function GACVHToString(gacvh) {
    if ( (!gacvh) || (!gacvh['head']) ) {
	return  '' ;
    }
    
    var string = 'head: ' + gacvh['head'] ;

    for (loop=1; loop<=5; ++loop)
    {
	if (gacvh['cv' + loop]) {
	    string += "\n" ;
	    string += 'cv' + loop + ': ' + gacvh['cv' + loop][0] + ', ' + gacvh['cv' + loop][1] + ', ' + gacvh['cv' + loop][2] + ', ' + gacvh['cv' + loop][3] ;
	}
    }

    return string ;
}

// Dates

function IsoDate(d)
{
    var year = d.getFullYear() ;
    var month = d.getMonth() + 1 ;
    var day = d.getDate() ;

    if (('' + month).length == 1) {
	month = '0' + month ;
    }

    if (('' + day).length == 1) {
	day = '0' + day ;
    }

    return year + '-' + month + '-' + day ;
}

// Coockies

function readCookieAsArray(name) {
    var string = readCookie(name) ;

    if (!string) {
	return null ;
    }

    return string.split(/,/);
}

function createCookieAsArray(name, array, days, domain) {
    createCookie(name, array.join(','), days, domain) ;
}

// Useful stuff
// - createCookie, readCookie, eraseCookie from http://www.quirksmode.org/js/cookies.html 
// - WasaHash from http://www.mojavelinux.com/articles/javascript_hashes.html

function createCookie(name, value, days, domain) {
    var expires = '' ;
    var sdomain = '' ;

    if (days) {
	var date = new Date();
	date.setTime(date.getTime()+(days*24*60*60*1000));
	expires = '; expires=' + date.toGMTString();
    }

    if (domain) {
	sdomain = '; domain=' + domain ;
    }

    document.cookie = name + '=' + value + expires + sdomain + '; 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, domain) {
    createCookie(name, '', -1, domain);
}

function WasaHash() {

    this.length = 0;
    this.items = new Array();
    for (var i = 0; i < arguments.length; i += 2) {
	if (typeof(arguments[i + 1]) != 'undefined') {
	    this.items[arguments[i]] = arguments[i + 1];
	    this.length++;
	}
    }
   
    this.removeItem = function(in_key) {
	var tmp_previous;
	if (typeof(this.items[in_key]) != 'undefined') {
	    this.length--;
	    var tmp_previous = this.items[in_key];
	    delete this.items[in_key];
	}

	return tmp_previous;
    }

    this.getItem = function(in_key) {
	return this.items[in_key];
    }

    this.setItem = function(in_key, in_value) {
	var tmp_previous;
	if (typeof(in_value) != 'undefined') {
	    if (typeof(this.items[in_key]) == 'undefined') {
		this.length++;
	    }
	    else {
		tmp_previous = this.items[in_key];
	    }

	    this.items[in_key] = in_value;
	}
	   
	return tmp_previous;
    }

    this.hasItem = function(in_key) {
	return typeof(this.items[in_key]) != 'undefined';
    }

    this.clear = function() {
	for (var i in this.items) {
	    delete this.items[i];
	}

	this.length = 0;
    }
}
