//	Control Page Style Javascript - Copyright (C) 2009-2010 Charles A Upsdell, All Rights Reserved; www.upsdell.com
//
//  External dependencies:  cCookie(), String.alert()

cPageStyle.prototype.$name = 'cPageStyle';

function cPageStyle( cookieName, aOptions, aStyles )
{
if ( arguments.length < 3 )
	{ this.$name.alert( '', 'has %0 arguments, needs 3', arguments.length ); return; }
this.cookieName = cookieName;
if ( document.URL.indexOf('http://') != 0 )
	this.cookieName += '_local';
this.aOptions = new Array();
this.aStyleSheet = new Array();
if ( aOptions instanceof Array )
  {	// Using new arglist
	if ( !(aStyles instanceof Array) )
		{ this.$name.alert( '', 'aStyles must be array' ); return; }
	for ( var i = 0; i < aOptions.length; ++i )
		this.aOptions[i] = aOptions[i];
	for ( var i = 0; i < aStyles.length; ++i )
		this.aStyleSheet[i] = aStyles[i];
  }
else
  { // Using old arglist
	for ( var i = 0; i < (arguments.length-1); ++i )
		this.aStyleSheet[i] = arguments[i+1];
  }
this.aCookie = new cCookie( this.cookieName );
for ( var i = 0; i < aOptions.length; ++i )
  {
	if ( typeof(this.aCookie[aOptions[i]]) == 'undefined' )
		this.aCookie[aOptions[i]] == null;
  }
this.styleTitleToUse = this.aCookie['style'];
if ( !this.styleTitleToUse )
	this.styleTitleToUse = this.getPreferredStylesheet();
if ( this.styleTitleToUse == null )
  {
	this.styleTitleToUse = this.aStyleSheet[0];
  }
else
  {
	for ( var i = 0; i <= this.aStyleSheet.length; ++i )
	  {
		if ( i == this.aStyleSheet.length )
			this.styleTitleToUse = this.aStyleSheet[0];
		else if ( this.styleTitleToUse == this.aStyleSheet[i] )
			break;
	  }
  }
var styleTitleUsedNow = this.getActiveStylesheet();
if ( this.styleTitleToUse != styleTitleUsedNow )
	this.setActiveStylesheet ( this.styleTitleToUse );
return;
}

cPageStyle.prototype.getActiveStylesheet = function ()
{
var $name = 'getActiveStylesheet';
var element;
for ( var i = 0; (element = document.getElementsByTagName("link")[i]); i++ )
  {
	if ( (element.getAttribute("rel").indexOf("style") != -1) && (element.getAttribute("title")) && (!element.disabled) )
		return( element.getAttribute("title") );
  }
return( null );
}

cPageStyle.prototype.getPreferredStylesheet = function ()
{
var $name = 'getPreferredStylesheet';
var element;
for ( var i = 0; (element = document.getElementsByTagName("link")[i]); i++ )
  {
	if ( (element.getAttribute("rel").indexOf("stylesheet") != -1) && (element.getAttribute("rel").indexOf("alternate") == -1) && (element.getAttribute("title")) )
		return( element.getAttribute("title") );
  }
return( null );
}

cPageStyle.prototype.saveActiveStylesheet = function ()
{
var $name = 'saveActiveStylesheet';
var styleTitleUsedNow = this.getActiveStylesheet();
this.aCookie['style'] = styleTitleUsedNow;
this.aCookie.storeCookie( 366, '/', '', false )
}

cPageStyle.prototype.setActiveStylesheet = function ( title )
{
var $name = 'setActiveStylesheet';
if ( arguments.length == 0 )
	title = this.styleTitleToUse;
var element;
for ( var i = 0; (element = document.getElementsByTagName("link")[i]); i++ )
  {
	if ( (element.getAttribute("rel").indexOf("stylesheet") != -1) && (element.getAttribute("title")) )
	  {
		element.disabled = true;
		if ( element.getAttribute("title") == title )
			element.disabled = false;
	  }
  }
}

cPageStyle.prototype.saveOptions = function ()
{
var $name = 'saveOptions';
var styleTitleUsedNow = this.getActiveStylesheet();
this.aCookie['style'] = styleTitleUsedNow;
this.aCookie.storeCookie( 366, '/', '', false )
}

cPageStyle.prototype.setOption = function ( property, value )
{
var $name = 'setOption';
if ( arguments.length == 2 )
  {
	if ( this.aOptions.indexOf(property) != -1 )
		this.aCookie[property] = value;
  }
else
  {
	this.$name.alert( '$name', '%0 arguments, but 2 are needed', arguments.length );
  }
this.saveOptions();
}
