var USER_PREF_DEFAULT_MAP = new MfHashtable({
    auto_browse_pause:3800,
    scroll_speed:2,
    em_version:1,       //thumb size 1 | 2 | 3
    em_version_old:0,   //default is 0
    show_search_panel:1,
	show_tooltips:1
});

//var USER_PREF_MAP = new MfHashtable();
var USER_PREF_MAP = USER_PREF_DEFAULT_MAP.copy();//they do not want to call getsetuserapp on the homepage so make it a default

function readAppPrefForm(){
    return {
        auto_browse_pause:dwr.util.getValue("auto_browse_pause"),
        //scroll_speed:dwr.util.getValue("scroll_speed"),
        em_version:dwr.util.getValue("em_version"),
        show_search_panel:dwr.util.getValue("show_search_panel")
		//show_tooltips:dwr.util.getValue("show_tooltips")
    };
}

function writeAppPrefForm(){
    dwr.util.setValue("auto_browse_pause",USER_PREF_MAP.get("auto_browse_pause"));
    //dwr.util.setValue("scroll_speed",USER_PREF_MAP.get("scroll_speed"));
    dwr.util.setValue("em_version",USER_PREF_MAP.get("em_version"));
    dwr.util.setValue("show_search_panel",USER_PREF_MAP.get("show_search_panel"));
	//dwr.util.setValue("show_tooltips",USER_PREF_MAP.get("show_tooltips"));
/*
	commented this out for now since we aren't allowing toggling of tooltips at this point
	EM-831
	Chris Bruce - launch date - Dec 11, 2008
	
   if ( USER_PREF_MAP.get("show_tooltips") == 1) {
        tt_Enabled	= true;
    } else {
        tt_Enabled	= false;
    }
*/

    setupUserPref();
}

function getUserPrefStatus(){
    var map = readAppPrefForm();

    var ret = new Array();

    if ( USER_PREF_MAP.get("auto_browse_pause") != map.auto_browse_pause ) {
        ret.push( {'id':"auto_browse_pause",'isChange': true} );
    } else {
        ret.push( {'id':"auto_browse_pause",'isChange': false}  );
    }
/*
    if ( USER_PREF_MAP.get("scroll_speed") != map.scroll_speed ) {
        ret.push( {'id':"scroll_speed",'isChange': true} );
    } else {
        ret.push( {'id':"scroll_speed",'isChange': false} );
    }
*/
    if ( USER_PREF_MAP.get("em_version") != map.em_version ) {
        ret.push( {'id':"em_version",'isChange': true} );
    } else {
        ret.push( {'id':"em_version",'isChange': false}  );
    }
    if ( USER_PREF_MAP.get("show_search_panel") != map.show_search_panel ) {
        ret.push( {'id':"show_search_panel",'isChange': true}  );
    } else {
        ret.push( {'id':"show_search_panel",'isChange': false} );
    }
/*
    if ( USER_PREF_MAP.get("show_tooltips") != map.show_tooltips ) {
        ret.push( {'id':"show_tooltips",'isChange': true} );
    } else {
        ret.push( {'id':"show_tooltips",'isChange': false} );
    }
*/    
    return ret;
}

function setupUserPref(){
    userPref = getUserPrefStatus();
    userPrefChanged = 0;
    for (var i = 0; i < userPref.length; i++) {
        if ($("pref_" + userPref[i]['id'])) {
            if (userPref[i]['isChange']) {
                $("pref_" + userPref[i]['id']).style.backgroundColor = "#ffc";
                userPrefChanged++;
            } else {
                $("pref_" + userPref[i]['id']).style.backgroundColor = $("user_prefs_form").style.backgroundColor;
            }
        }
    }

    if (userPrefChanged > 0) {
        $("pref_user_msg").style.display = "block";
    } else {
        $("pref_user_msg").style.display = "none";
    }
}

function saveAppPreferences(){
    var map = readAppPrefForm();

	// consider rolling this into a loop if we ever have more than three preference options
	USER_PREF_MAP.set("auto_browse_pause", map.auto_browse_pause);
	USER_PREF_MAP.set("scroll_speed", map.scroll_speed);
    var oldEmVersion = USER_PREF_MAP.get("em_version");
    USER_PREF_MAP.set("em_version_old", oldEmVersion);
    USER_PREF_MAP.set("em_version", map.em_version);
    USER_PREF_MAP.set("show_search_panel", map.show_search_panel);
	USER_PREF_MAP.set("show_tooltips", map.show_tooltips);
/*
	commented this out for now since we aren't allowing toggling of tooltips at this point
	EM-831
	Chris Bruce - launch date - Dec 11, 2008

    if ( map.show_tooltips == 1) {
        tt_Enabled	= true;
    } else {
        tt_Enabled	= false;
    }
*/

    GetSetUserAppPrefs.execute({action:"set",userPrefs:JSON.stringify(USER_PREF_MAP.storage)},function(response){});      
    panel_slide_in ( "user_prefs_form" );

    setCookie ( "em_version", USER_PREF_MAP.get("em_version"), 365 );

    if ( oldEmVersion !=  USER_PREF_MAP.get("em_version") ) {
        //window.location.reload(); this ought to be enough but it is not so i will add a made up param
        //to force reload
        var loc = ""+top.location;

        var idx = loc.indexOf("?");
        var idx_hash = loc.indexOf("#");
        var newLoc = "";
        if(idx>0){
            var param = "";
            var hash = "";
            if ( idx_hash > 0 ) {
                param = loc.substr(idx,idx_hash-idx);
                hash = loc.substr( idx_hash );
            }

            newLoc = loc.substr(0,idx);
            newLoc = newLoc + "?query=" + Url.encode( DWRUtil.getValue("querybox") );
            if ( param.getQueryValue("submit") ) {
                newLoc = newLoc + "&submit=" + param.getQueryValue("submit");
            }
            if ( param.getQueryValue("searchType") ) {
                newLoc = newLoc + "&searchType=" + param.getQueryValue("searchType");
            }
            if ( param.getQueryValue("licType") ) {
                newLoc = newLoc + "&licType=" + getRadioValue($("search_form").licType);
            }
            if ( param.getQueryValue("sort") ) {
                newLoc = newLoc + "&sort=" + getRadioValue($("search_form").sort);
            }

            newLoc = newLoc + "&rere=reload&rets=" + (new Date()).getTime();

            newLoc = newLoc + hash;
        }

        if ( newLoc.trim().length > 0 ) {
            top.location = newLoc;
        }
    }

     $("pref_show_search_panel").style.backgroundColor = '#F2F2F2';
     $("pref_user_msg").style.display = "none";
}

function initializeAppPreferences() {

    $("user_prefs_display").style.display = "none";
    $("user_prefs_wait").style.display = "block";
    GetSetUserAppPrefs.execute({action:"get"}, {
          callback:loadAppPreferences,
          errorHandler:function(message) {
                writeAppPrefForm();
                $("user_prefs_display").style.display = "block";
                $("user_prefs_wait").style.display = "none"; }
        });
}

USER_GUEST          =  0;
USER_REGISTERED     =  1;
USER_AUTHENTICATED  =  2;
var userType = 0;

function loadAppPreferences(response){
    var map = USER_PREF_DEFAULT_MAP.copy();
    map.update(new MfHashtable(response.userPrefs));
    USER_PREF_MAP = map;

    em_version_cookie = getCookie("em_version");
    if ( em_version_cookie == null ) {
        USER_PREF_MAP.set("em_version", application.em_version );   // em_version could be altered by screen detector
        setCookie ( "em_version", USER_PREF_MAP.get("em_version"), 365 );
        GetSetUserAppPrefs.execute({action:"set",userPrefs:JSON.stringify(USER_PREF_MAP.storage)},function(response){});
    } else {
        if ( em_version_cookie != USER_PREF_MAP.get("em_version") ) {
            USER_PREF_MAP.set("em_version", em_version_cookie );
            GetSetUserAppPrefs.execute({action:"set",userPrefs:JSON.stringify(USER_PREF_MAP.storage)},function(response){});
        }                
    }

    USER_PREF_MAP.set("show_tooltips",true);//HACK :-( always show preferences business requirement TODO adding todo so that it easy to find

    writeAppPrefForm();

    userType = response.userType;


    $("user_prefs_display").style.display = "block";
    $("user_prefs_wait").style.display = "none";
    if(response.itemsInCart){
        if($("sc_total_count")){
            $("sc_total_count").innerHTML = response.itemsInCart;
        }
    }
}
DISPATCHER.subscribe("GET_USER_PREFS",initializeAppPreferences);

DISPATCHER.subscribe("SET_USER_PREFS",saveAppPreferences);

