/** usability handler **/

var Usability = {
    textSize : 12,
    minSize : 10,
    maxSize : 18,
    myRules : null,
    fixRules : new Array(),
    fixRule : null,
    isSaving : true,
    request : null,
    init : function(ruleName) {
	myRules = new Array();
	if( document.styleSheets[0].cssRules )
	    myRules = document.styleSheets[0].cssRules;
	else if( document.styleSheets[0].rules )
	    myRules = document.styleSheets[0].rules;

	for( var j = 0; j < myRules.length; j ++ ) {
	    if( myRules[j].selectorText.toLowerCase().indexOf( ruleName.toLowerCase() ) != -1 ) {
		if( Usability.fixRule == null )
		    Usability.fixRule = myRules[j];
		Usability.fixRules[ Usability.fixRules.length ] = myRules[j];
	    }
	}

	Usability.serialize( false );
    },
    larger : function() {
	if( !Usability.fixRule ) return;
	if( Usability.textSize >= Usability.maxSize ) return;
	Usability.textSize ++;
	Usability.fixRule.style.fontSize = Usability.textSize + "px";

	for( var j = 0; j < Usability.fixRules.length; j ++ ) {
	    if( Usability.fixRules[j] == Usability.fixRule ) continue;
	    if( Usability.fixRules[j].style.fontSize <= "" ) continue;
	    var cs = Usability.fixRules[j].style.fontSize.substring( 0, 
			Usability.fixRules[j].style.fontSize.length - 2 );
	    Usability.fixRules[j].style.fontSize = (new Number(cs)+1) + "px";
	}

	Usability.serialize( true );
    },
    smaller : function() {
	if( !Usability.fixRule ) return;
	if( Usability.textSize <= Usability.minSize ) return;
	Usability.textSize --;
	Usability.fixRule.style.fontSize = Usability.textSize + "px";

	for( var j = 0; j < Usability.fixRules.length; j ++ ) {
	    if( Usability.fixRules[j] == Usability.fixRule ) continue;
	    if( Usability.fixRules[j].style.fontSize <= "" ) continue;
	    var cs = Usability.fixRules[j].style.fontSize.substring( 0, 
			Usability.fixRules[j].style.fontSize.length - 2 );
	    Usability.fixRules[j].style.fontSize = (new Number(cs)-1) + "px";
	}

	Usability.serialize( true );
    },
    onResponse : function() {
	if( (Usability.request.readyState == 4) &&
	    (Usability.request.status==200 || window.location.href.indexOf("http")==-1))
	{
	    if( !Usability.isSaving ) {
		var parts = Usability.request.responseText.split( "|" );

		for( var j = 0; j < parts.length; j += 2 ) {
		    for( var x = 0; x < Usability.fixRules.length; x ++ ) {
			if( Usability.fixRules[x].selectorText.toLowerCase() == parts[j].toLowerCase() ) {
			    Usability.fixRules[x].style.fontSize = parts[j+1];

			    if( Usability.fixRules[x] == Usability.fixRule ) {
				Usability.textSize = new Number( parts[j+1].substring( 0, parts[j+1].length - 2) );
			    }
			}
		    }
		}
	    }
	}
    },
    sendRequest : function(query) {
	if (window.XMLHttpRequest)
	    Usability.request = new XMLHttpRequest()
	else if (window.ActiveXObject)
	{
	    try {
		Usability.request = new ActiveXObject("Msxml2.XMLHTTP")
	    } catch (e){
		try{
		    Usability.request = new ActiveXObject("Microsoft.XMLHTTP")
		} catch (e){
		    return false;
		}
	    }
	}
	else {
	    return false
	}

	var url = "/php/usability.php?" + query;
	Usability.request.onreadystatechange=Usability.onResponse;
	Usability.request.open( "GET", url, true );
	Usability.request.send( null );
    },
    serialize : function(saveload) {
	if( saveload ) {
	    Usability.isSaving = true;
	    var data = "";
	    for( var j = 0; j < Usability.fixRules.length; j ++ ) {
			if( Usability.fixRules[j].style.fontSize <= "" ) continue;
			data = data + Usability.fixRules[j].selectorText.toLowerCase() + "|" + Usability.fixRules[j].style.fontSize + "|";
	    }
	    Usability.sendRequest( "op=save&data=" + escape( data ) );
	} else {
	    Usability.isSaving = false;
	    Usability.sendRequest( "op=load" );
	}
    }
};
