/*
* Requires is.js
*/

/******************************************************************
* Implements ideas from 
* http://spaces.msn.com/members/siteexperts/Blog/cns!1pNcL8JwTfkkjv4gg6LkVCpw!1805.entry
* Allows one to create browser specific css rules inside of CSS of this form:
*
*   html.opera div.className {
*	// CSS that only opera will read
*   }
* 
*   html.gecko.minor1.1 {
*	CSS that only mozilla based browser that use gecko 1.1 
*   }
********************************************************************/

function insertConditionalCSS() {
	var html = document.getElementsByTagName('html')[0];

	//Logger.info(domShowProps(navigator));
	var className = "";
	for (i in is) {
		if (is[i] == true) {
			className += i + ' ';
		}
	}

	if (is.gecko) {
		className += 'gecko ' +
		  'major' + is.gecko.major + ' minor' + is.gecko.minor;
	} else {
		className += 'major' + is.major + ' minor' + is.minor;
	}

	html.className = className.replace(/\./g, '-');

}

function oldIEGetAttribute(obj, attr) {
	var outerHTML = obj.outerHTML.toLowerCase().split('>')[0];
	var attributePairs = outerHTML.split(' ');
	var re = new RegExp('^' + attr + '=');

	for (i=0; i<attributePairs.length; i++) {
		var theAttributePair = attributePairs[i];
		if (theAttributePair.match(re)) {
			var value = theAttributePair.split('=')[1].replace(/\"/g, '');
			return value;
		}
	}
	return null;

	
}

function fixButtons(e) {

	/* make sure we get the button element here */
	var theButton;

	for (theButton = domEventTarget(e); 
		theButton.nodeName.toLowerCase() != 'button'; 
		theButton=theButton.parentNode) ;

	var value = oldIEGetAttribute(theButton, 'value');

	theButton.value = value;

	//Now ... go into the form and delete all the button values
	//so IE doesn't send them 
	
	var theForm = theButton.form;

	var buttons = theForm.getElementsByTagName('button');
	var buttonsToRemove = new Array();

	for (var i=0; i<buttons.length; i++) {

		var iterButton = buttons[i];
			if (iterButton.type == 'submit') {
			if (iterButton.name != theButton.name) {
				buttonsToRemove[buttonsToRemove.length] = 
					iterButton;
			} else {
				iterButton.style.visibility = 'hidden';
			}
		}

	}

	for (var i=0; i<buttonsToRemove.length; i++) {
		var iterButton = buttonsToRemove[i];
		var theParent = iterButton.parentNode;

		theParent.removeChild(iterButton);
	}

	// make all the body disappear just so it doesn't look odd
	document.getElementsByTagName('body')[0].style.visibility = 'hidden';

	// For some reason ... table borders remain visible when you do this in IE, so 
	// let's get rid of them.
	var removeBordersFrom = new Array();

	removeBordersFrom[0] = document.getElementsByTagName('table');
	removeBordersFrom[1] = document.getElementsByTagName('th');
	removeBordersFrom[2] = document.getElementsByTagName('tr');
	removeBordersFrom[3] = document.getElementsByTagName('td');

	
	for (var i=0; i<removeBordersFrom.length; i++) {
	  for (var j=0; j<removeBordersFrom[i].length; j++ ) {
		var theTag = removeBordersFrom[i][j];
		theTag.style.border='none';
	  }
	}
}

function fixButtonTagBug(e) {
	var forms = document.getElementsByTagName('form');

	for (var i=0; i<forms.length; i++) {
		var theForm = forms[i];
		/* domAddEvent(theForm, 'submit', submitFormCheckForButtons, 
			false); */
		var buttons = theForm.getElementsByTagName('button');
		for (var j=0; j<buttons.length; j++) {
			var theButton = buttons[j];
			domAddEvent(theButton, 'click', fixButtons, false);
		}
	}
}


function initFixBrowserBugs() {

	if (is.ie && is.major <= 6)  {
		// This fixes IE's broken button tags.
		fixButtonTagBug();
	}

	// For all browsers: allows us to put in conditional CSS
	insertConditionalCSS();

}

function unloadFixBrowserBugs() {
	setTimeout('unloadFixBrowserBugsHelper()', 1);
}


function unloadFixBrowserBugsHelper() {
}

domAddEvent(window, 'load', initFixBrowserBugs, false);
domAddEvent(window, 'unload', unloadFixBrowserBugs, false);
