//	StyleMod v2.0
//  DHTML Dynamic CSS Modifier
//	© 2005 StyleMod.com
//	Programming By Stephen Hallgren (www.teevio.net)


///Determine how to read the stylesheet depending upon browser


function checkBrowser () {
	var theRules = new Array();
	if (document.styleSheets[0].cssRules) {
		return document.styleSheets[0].cssRules;
	} else if (document.styleSheets[0].rules || document.all) {
		return document.styleSheets[0].rules;
	} else {
		return;
	}
}

///Set cookie for updating css on page load
function setcsscookie (myclass, element, value, fieldvalue) {
	var date = new Date();
    date.setTime(date.getTime()+(365*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
    var path = "; path=/";
	if (getCookie(myclass)) {
		var newvalues = "";
		var updated = false;
		var cvalues = getCookie(myclass);
		firstsplit = cvalues.split(",");
		for (var i = 0; i < firstsplit.length; i++) {
			secondsplit = firstsplit[i].split("|");
///Check to see if element is in cookie
			if (secondsplit[0] == element) {
				//Update element value
				newvalues += element + "|" + value + "|" + fieldvalue + ",";
				var updated = true;
			} else if (secondsplit[0] != "") {
				newvalues += firstsplit[i]+",";
			}
		}
///If cookie hasn't been updated, add element and value
		if (updated == false)
				newvalues += element + "|" + value + "|" + fieldvalue + ",";
		document.cookie = myclass+"="+newvalues+expires+path;
	} else {
		document.cookie = myclass+"="+element+"|"+value+"|"+fieldvalue+expires+path;
	}
}

///Find cookie by name
function getCookie(name) {
    var dc = document.cookie;
    var prefix = name + "=";
    var begin = dc.indexOf("; " + prefix);
    if (begin == -1) {
        begin = dc.indexOf(prefix);
        if (begin != 0) return null;
    } else {
        begin += 2;
    }
    var end = document.cookie.indexOf(";", begin);
    if (end == -1) {
        end = dc.length;
    }
    return unescape(dc.substring(begin + prefix.length, end));
}

function deleteCookies () {
	var date = new Date();
    date.setTime(date.getTime());
    var expires = "; expires="+date.toGMTString();
    var path = "; path=/";
	var theRules = checkBrowser ();
	for (var i = 0; i < theRules.length; i++) {
		var myclass = theRules[i].selectorText.toLowerCase();
///Convert Safari #ids into proper format
		newclass = myclass.replace(/\*\[id\"([^\"]*)\"\]/g, "\#$1");
		if (getCookie(newclass)) {
			document.cookie = newclass + "="+""+" "+expires+path;
		}
	}
}


///Updates CSS Based upon any cookies set that match up with the style sheet classes
function cookiecss () {
	var theRules = checkBrowser ();
	for (var i = 0; i < theRules.length; i++) {
		var myclass = theRules[i].selectorText.toLowerCase();
///Convert Safari #ids into proper format
		newclass = myclass.replace(/\*\[id\"([^\"]*)\"\]/g, "\#$1");
		if (getCookie(newclass)) {
			var cvalue = getCookie(newclass);
			firstsplit = cvalue.split(",");
			for (var j = 0; j < firstsplit.length; j++) {
				secondsplit = firstsplit[j].split("|");
				if (secondsplit[0] != "") {
///Update CSS from Cookie data
					theRules[i].style[secondsplit[0]] = secondsplit[1];
					if (document.getElementById(secondsplit[2])) {
						hex = secondsplit[1].replace(/\#/,'');
						document.getElementById(secondsplit[2]).value = hex;
					}
				}
			}
		}
	}
}

function changecss (classes,elements,values,modifiers,cookie,fields) {
	var element,value,modifier,classvalue,fieldvalue;
	var elementsplit = elements.split(";");
	var classsplit = classes.split(";");
	var valuesplit = values.split(";");
	var modifiersplit = modifiers.split(";");
	var fieldsplit = fields.split(";");
	var lastelement = "0";
	var lastclass = "0";
	var lastvalue = "0";
	var lastmodifier = "0";
	var lastfield = "0";
	var value;
	var splitlength = Math.max(elementsplit.length,classsplit.length,valuesplit.length,modifiersplit.length,fieldsplit.length)
	for (var i = 0; i < splitlength; i++) {
		if (elementsplit[i]) {
			element = elementsplit[i];
			lastelement = i;
		} else {
			element = elementsplit[0];
		}
		if (valuesplit[i]) {
			value = valuesplit[i];
			lastvalue = i;
		} else {
			value = valuesplit[lastvalue];
		}
		if (modifiersplit[i]) {
			modifier = modifiersplit[i];
			lastmodifier = i;
		} else {
			modifier = modifiersplit[lastmodifier];
		}
		if (classsplit[i]) {
			classvalue = classsplit[i];
			lastclass = i;
		} else {
			classvalue = classsplit[lastclass];
		}
		if (fieldsplit[i]) {
			fieldvalue = fieldsplit[i];
			lastfield = i;
		} else {
			fieldvalue = fieldsplit[lastfield];
		}
		if (modifier == "hex") {
			if (value.length == 3) {
				value = value + value;
			}  else if (value.length == 2) {
				value = value+value+value;
			} else if (value.length != 6) {
				value = "";
			}
		}
		changecsssplit(classvalue,element,value,modifier,cookie,fieldvalue);
	}
}


///Change CSS with a specific value given
function changecsssplit(myclass,element,value,modifier,cookie,fieldvalue) {
     var value = '#'+value;
	if (fieldvalue)
		document.getElementById(fieldvalue).value = value;
	if (modifier != "hex") {
		value = value + modifier;
	} else {
		if (value != "")
			value = "#"+value;
	}
	myclass = myclass.toLowerCase();
///Convert class to accomodate for Safari
	var safariclass = myclass.replace(/\#([\w\-]+)/g, "*[id\"$1\"]");
	var theRules = checkBrowser ();
	for (var i = 0; i < theRules.length; i++) {
		if (theRules[i].selectorText.toLowerCase() == myclass || theRules[i].selectorText.toLowerCase() == safariclass) {
			theRules[i].style[element] = value;
			if (cookie)
				setcsscookie (myclass, element, value, fieldvalue);
		}
	}
}

///Change CSS with values specified in the cases below
function updatecss (myclass, element, value) {
	myclass = myclass.toLowerCase();
///Convert class to accomodate for Safari
	var safariclass = myclass.replace(/\#([\w\-]+)/g, "*[id\"$1\"]");
	var theRules = checkBrowser ();
	for (var i = 0; i < theRules.length; i++) {
		if (theRules[i].selectorText.toLowerCase() == myclass || theRules[i].selectorText.toLowerCase() == safariclass) {
			var currentValue = theRules[i].style[element];
			var m = currentValue.match(/^(.*?)([\d]+)(.*)$/);

			if (m) {
				switch (value) {
					case "smaller":
						m[2]--;
					break;
			
					case "bigger":
						m[2]++;
					break;
				}

			var newValue = m[1] + m[2] + m[3];
			theRules[i].style[element] = newValue;
			setcsscookie (myclass,element, newValue);
			} else {
				alert ('failed');
			}
		}
	}
}


