/**
 * @author Russ Tennant (russ@i2rd.com)
 * @require logger.js
 */
if(typeof cmsiepermiatefix == 'undefined') {
cmsiepermiatefix = true;
if(typeof cms == 'undefined'){cms = {};}

cms_hiddenElements = [];
/**
* Hide obscured elements. Useful when supporting MSIE.
* @param exclude the element to exclude.
*/
cms.hideObscuredElements = function (exclude) {
	if(!(navigator.userAgent.match(/MSIE [456]/) && !window.opera)){return;}
	if(!exclude){return;}
	cms.showObscuredElements();
	var elements = [];
	elements.pushAll(i2rd.getBody().childNodes);
	var el;
	while((el = elements.pop())) {
		if(el == exclude){continue;}
		elements.pushAll(el.childNodes);
		if(el.nodeType == 1 /* ELEMENT_NODE */) {
			if(el.nodeName.toLowerCase() == "select") {
				try {
					el.style.visibility = "hidden";
					cms_hiddenElements.push(el);
				} catch(e) {
					log4js.logger.error("Error accessing element in hideObscuredElement.", e);
				}				
			}
		}
	}
};

/**
* Show previously obscured elements.
*/
cms.showObscuredElements = function() {
	var el;
	while( (el = cms_hiddenElements.pop()) ) {
		try {
			el.style.visibility = "visible";
		} catch(e) {
			log4js.logger.error("Error accessing element in showObscuredElement.", e);
		}
	}
};

// Fix for IE's lack of proper button support.
cms.__fixIEButtonHandling = function(evt) {
    
	try {
		var button = (evt.target || evt.srcElement);
		var form = button.form, name = button.name, value = button.value;
        //log4js.logger.info("Fixing button: " + button.nodeName + " : " + button.id + " : " + value);
		var alt = $(button.id + "_value");
		if(alt && alt.value) {value = alt.value;}
        //log4js.logger.info("Fixing button: " + button.nodeName + " : " + button.id + " : " + value);
		// Find all buttons and remove them from the form.
		for(var h = 0; h < form.elements.length; h++) {
			var el = form.elements[h];
			if(el.nodeName.toLowerCase() == 'button') {
				var type = 	el.getAttribute('type');
				if(type == 'submit') {
					el.parentNode.removeChild(el);		
				}
			}
		}
		if(!form[name]) {
			var input = i2rd.createElement("input");
			input.setAttribute("type", "hidden");
			input.setAttribute("name", name);
			input.setAttribute("id", name);
			input.setAttribute("value", value);
			form.appendChild(input);
            //log4js.logger.info("Added form input.");
		} else {
            //log4js.logger.info("Didn't add form input.");
        }
		form.submit();
	} catch(ee) {
		log4js.logger.error("Caught error manipulating form.", ee);
	}
    return true;
};
cms.__fixIEButtonInit = function() {
	var i, ib, type, cn, el, buttons = document.getElementsByTagName("button");
	for(i = 0, ib = buttons.length; i < ib; i++) {
        el = buttons[i];
		type = 	el.getAttribute('type');
        cn = el.className || "";
		if(cn.match("fixie") && (!type || type == 'submit')) {
            if (typeof el.iesetup == 'undefined') {
                i2rd.addEvent(el, 'click', cms.__fixIEButtonHandling);
                el.iesetup = true;
            }
		}
	}
};
if( (navigator.userAgent.match(/MSIE [4567]/) && !window.opera) ) { // Init
	i2rd.addEvent(window, 'onload', cms.__fixIEButtonInit);
    window.setTimeout(cms.__fixIEButtonInit, 750); // In case window loaded
}

}// End conditional eval
