function siteUtils(s_objname_fp) {
    //ajax_class.js must be available for many of these functions to work!
    //herein lie all of the little bits of code that aren't enough like something else to be included in a different class
    /* BEGIN PRIVATE VARIABLES */
    var o_ajax; //ajax object, should one need it
    var s_objname; //object's instance name for callbacks
    //"CONSTANTS"
    //DEF_ (defaults)
    var DEF_CALEND = 2008;
    var DEF_CALSTART = 1920;
    var DEF_CALENDAR = [{"month":1,"length":31},{"month":2,"length":28},{"month":3,"length":31},{"month":4,"length":30},{"month":5,"length":31},{"month":6,"length":30},{"month":7,"length":31},{"month":8,"length":31},{"month":9,"length":30},{"month":10,"length":31},{"month":11,"length":30},{"month":12,"length":31}];
    //ERR_ (error messages)
    //HTML_ (template html strings)
    var HTML_SELECT = '<select id="_id_" onchange="_onchange_">_option_</select>';
    var HTML_SELECTOPTION = '<option value="_value_">_option_</option>';
    //KEY_ (index keys)
    //RGX_ (regex matching strings)
    var RGX_ID = /_id_/g;
    var RGX_ONCHANCE = /_onchange_/g;
    var RGX_OPTION = /_option_/g;
    var RGX_VALUE = /_value_/g;
    /* END PRIVATE VARIABLES */


    /* BEGIN PUBLIC METHOD POINTERS */
    this.outEntityDecode = outEntityDecode;
    this.doDownloadWindow = doDownloadWindow;
    this.doGameWindow = doGameWindow;
    this.doNewWindow = doNewWindow;
    this.doTrackerWindow = doTrackerWindow;
    this.getJSONValue = getJSONValue;
    this.getUriValue = getUriValue;
    /* END PUBLIC METHOD POINTERS */


    /* BEGIN "CONSTRUCTOR" ACTIONS */
    setCallback(s_objname_fp);
    /* END "CONSTRUCTOR" ACTIONS */


    /* BEGIN PUBLIC METHODS */
    function outEntityDecode(s_str_fp) {  //this converts any and all encoded HTML entities back to original chars
    	var o_span = document.createElement('span');
    	o_span.innerHTML = s_str_fp;
    	return o_span.innerHTML;
    }
    
    function doDownloadWindow(s_url_fp) {
	var pageTracker = _gat._getTracker("UA-5522344-2");
	pageTracker._trackPageview();

        var download = window.open(s_url_fp,'download','directories=no,height=50,width=50,location=0,menubar=0,titlebar=0,toolbar=0');
	setTimeout( function(){ download.close(); } , 12000 );
    }
    
    function doGameWindow(s_url_fp) {
        window.open(s_url_fp,'game','directories=no,height=500,width=780,location=no,menubar=no,titlebar=no,toolbar=no');
    }

    function doNewWindow(s_url_fp,b_disclaimer_fp) {
        if (b_disclaimer_fp) {
            //to be implemented
            //confirm we wanna leave
            //need to figure out how to get the confirm() language in here on the fly
        } else {
            window.open(s_url_fp);
        }
    }
    
    function doTrackerWindow(s_url_fp) {
    	window.open(s_url_fp,'tracker','directories=no,height=50,width=50,location=no,menubar=no,titlebar=no,toolbar=no');
    }

    function getJSONValue(a_json_fp, s_key_fp) {
        //we assume here that the JSON exists as a ready-to-use variable
        //we also assume that we've only got a 1D array
        if (a_json_fp[s_key_fp]) {
            return a_json_fp[s_key_fp];
        } else {
            return false;
        }
    }

    function getUriValue(s_key_fp) {
        //s_key_fp = uri query string param that we want the value of
        //returns value of sought uri query param
        if (document.location.search.substring(0,1) == '?') {
            var s_uriquery = document.location.search.substring(1);
            var a_uriquery = new Array();
            var a_tmp;
            if (s_uriquery.indexOf('&') != -1) {
                var a_uriqueryitems = s_uriquery.split('&');
                var i_index;
                for (i_index in a_uriqueryitems) {
                    a_tmp = a_uriqueryitems[i_index].split('=');
                    a_uriquery[a_tmp[0]] = a_tmp[1];
                }
            } else {
                a_tmp = s_uriquery.split('=');
                a_uriquery[a_tmp[0]] = a_tmp[1];
            }
            if (a_uriquery[s_key_fp]) {
                return a_uriquery[s_key_fp];
            } else {
                return false;
            }

        } else {
            return false;
        }
    }
    /* END PUBLIC METHODS */


    /* BEGIN PRIVATE METHODS */
    function setCallback(s_objname_fp) {
        s_objname = s_objname_fp;
    }
    /* END PRIVATE METHODS */
}
