function iframeClose(){ 
	if (parent!=self){
		return parent.iframeClose();
	} else {
		return true;
	}
}

/* ------------------------------------
whatever:hover
-------------------------------------- */
var currentSheet, doc = window.document;

function parseStylesheets() {
	/* if not ie, cancel parse */	
	if (document.all){
		var detect = navigator.userAgent.toLowerCase();
		if (detect.indexOf('msie') == -1 ){
			return false;
		}
	} else { return false }
	
	var sheets = doc.styleSheets, l = sheets.length;
	for(var i=0; i<l; i++) parseStylesheet(sheets[i]);
}
	function parseStylesheet(sheet) {
		var l, rules, imports;
		if(sheet.imports) {
			imports = sheet.imports, l = imports.length;
			for(var i=0; i<l; i++) 
				parseStylesheet(sheet.imports[i]);
		}

		rules = (currentSheet = sheet).rules, l = rules.length;
		for(var j=0; j<l; j++) parseCSSRule(rules[j]);
	}

	function parseCSSRule(rule) {
		var select = rule.selectorText, style = rule.style.cssText;
		if(!(/(^|\s)(([^a]([^ ]+)?)|(a([^#.][^ ]+)+)):hover/i).test(select)) return;
		
		var newSelect = select.replace(/(\.([a-z0-9_-]+):hover)|(:hover)/g, '.$2onHover');
		var hasClass = (/(\.([a-z0-9_-]+):hover)/g).exec(select);
		var className = (hasClass? hasClass[2]:'') + 'onHover';
		var affected = select.replace(/:hover.*$/g, '');
		var elements = getElementsBySelect(affected);
		
		currentSheet.addRule(newSelect, style);
		for(var i=0; i<elements.length; i++)
			new HoverElement(elements[i], className);
	}

function HoverElement(node, className) {
	if(!node.hovers) node.hovers = {};
	if(node.hovers[className]) return;
	node.hovers[className] = true;
	node.attachEvent('onmouseover',
		function() { node.className += ' ' + className; });
	node.attachEvent('onmouseout',
		function() { node.className = 
			node.className.replace((new RegExp('\\s+'+className)),''); });
}

function getElementsBySelect(rule) {
	var parts, nodes = [doc];
	parts = rule.split(' ');
	for(var i=0; i<parts.length; i++) {
		nodes = getSelectedNodes(parts[i], nodes);
	}	return nodes;
}
	function getSelectedNodes(select, elements) {
		var result, node, nodes = [];
		var classname = (/\.([a-z0-9_-]+)/i).exec(select);
		var identify = (/\#([a-z0-9_-]+)/i).exec(select);
		var tagName = (/^[a-z0-9]+/i).exec(select.toUpperCase()) || '*';
		for(var i=0; i<elements.length; i++) {
			result = elements[i].getElementsByTagName(tagName);
			for(var j=0; j<result.length; j++) {
				node = result[j];
				if((identify && node.id != identify[1]) || (classname && !(new RegExp('\\b' +
					classname[1] + '\\b').exec(node.className)))) continue;
				nodes[nodes.length] = node;
			}
		}	return nodes;
	}













/* ------------------------------------
label highlighter
-------------------------------------- */

function initLabelHighlighter(){
	if (!document.forms[0]){return false;}
	formLabels = document.getElementsByTagName("LABEL");
	for (var f=0; f<document.forms.length; f++) {
		for (var e=0; e<document.forms[f].elements.length; e++) {
			document.forms[f].elements[e].onfocus = handleFormFocus;
		}
	}
}

function handleFormFocus(e){
	if (!e) {e = document.parentWindow.event}
	var el = e.target || e.srcElement;
	if ((el.tagName == "INPUT" || el.tagName == "TEXTAREA" || el.tagName == "SELECT") && el.getAttribute("id") 
		/*&& el.getAttribute("type") != "radio" && el.getAttribute("type") != "checkbox"*/){
		for (var i=0; i<formLabels.length; i++){
			if (formLabels[i].htmlFor == el.getAttribute("id")){
				formLabels[i].style.background = 'none';
				formLabels[i].style.color = '#E0AC21';				
			} else {
				formLabels[i].style.background = 'none';
				formLabels[i].style.color = '#02CAFC';				
			}
		}
	}
}







/* ------------------------------------
SELECT (RADIO | CHECKBOX) WITHIN TR
requiere tables.css
-------------------------------------- */

var prevTRDown;
function handleDown(e){
	if (!e) {e = document.parentWindow.event} 
	var el = e.target || e.srcElement;

	if (el.tagName == "INPUT"){var downOnInput = true;}

	while (el.tagName!="TR" && el.tagName != "HTML")	{ 
		el=el.parentNode;
	}
	if (el.tagName == "TR"){

		testEl = el; 
		while (testEl.tagName!="HTML")	{
			testEl = testEl.parentNode;
			noFX = (testEl.className=="noFX")?true:false;
			if (noFX) { break }
		}	

		if (!noFX) {
			if (prevTRDown){
				setClassToTR(prevTRDown,"outTR")
			}
			setClassToTR(el,"downTR") // efecto down 	
			prevTRDown = el;

			radio = digToFirstChild(el);
			if (radio && !downOnInput){
				if (radio.getAttribute("type")=="checkbox" && radio.checked == true){
					radio.checked = false;
				} else {
					radio.checked = true;
					theDiv = getElementsBySelect("div.tableActions");
					if (theDiv && theDiv.length > 0){
						multiSetDisabled(theDiv[0], false)
					}
				}
			}
		}
	}
}




/*
APLICADORES DE ESTILO
********************/

function setClassToTR(elem,style){ 
	while (elem.tagName!="TR" && elem.tagName != "HTML")	{ 
		elem=elem.parentNode;
	}
	if (elem.tagName != "HTML" && elem.parentNode.tagName != "THEAD"){
		elem.className = style; // aplica el style al TR que encontró
	}
}

/*
return the first child of an xml node 
param node es el nodo a partir del cual buscar
modificar el primer if según el nodo que se quiera encontrar
2003 - manuel razzari - convistaalmar.com.ar
*/
function digToFirstChild(node) {
	for (var i = 0; i<node.childNodes.length; i++) {
		if (node.childNodes[i].tagName == "INPUT" && ((node.childNodes[i].getAttribute("type")=="radio") || (node.childNodes[i].getAttribute("type")=="checkbox"))) {
			return node.childNodes[i]; // devuelve el primer nodo que encuentra 
		} else if (node.childNodes[i].childNodes.length>0){
			return digToFirstChild(node.childNodes[i]);
		}
	}
	if (node.nextSibling){
		return digToFirstChild(node.nextSibling);
	} else if (node.parentNode.nextSibling) {
		return digToFirstChild(node.parentNode.nextSibling);
	} else {
		return false; // devuelve false si no encuentra nada
	}
}





/*
MULTI SET DISABLED
Set multiple form elements disabled property to true|false.
- Params:
str idContanier: DOM node of any element in the HTML's tree. 
                 All elements within it will be disabled/enabled 
bool value: value to set disabled to.
- Sample usage
<input onclick="multiSetDisabled('myElement',true)" name="test" type="radio" />Disable
<fieldset id="myElement">
<input type="text" /><input type="radio" /><textarea></textarea><select><option></option></seletct>
</fieldset>
*/
function multiSetDisabled(container, value){

	inputs = container.getElementsByTagName('INPUT');
	selects = container.getElementsByTagName('SELECT');
	textareas = container.getElementsByTagName('TEXTAREA');	
	
	for (var i=0; i<inputs.length; i++){ inputs[i].disabled = value; }
	for (var i=0; i<selects.length; i++){ selects[i].disabled = value; }
	for (var i=0; i<textareas.length; i++){ textareas[i].disabled = value; }				
	
	return true;
}


/* ------------------------------------
Divs Hide/show product Detail
-------------------------------------- */

document.getElementsByClassName = function(needle){
	var my_array = document.getElementsByTagName("DIV");
	var retvalue = new Array();
	var i, j;
	for (i = 0, j = 0; i < my_array.length; i++){
		var c = " " + my_array[i].className + " ";
		if (c.indexOf(" " + needle + " ") != -1){
			retvalue[j++] = my_array[i];
		}
	}	
	return retvalue;
}

function show(id){
	hidden = document.getElementsByClassName("hide");

	for (var i=0; i<hidden.length; i++){
		hidden[i].style.display = "none";
	}
	document.getElementById(id).style.display = "block";
	return false;
}

function hide(id){
	document.getElementById(id).style.display = "none";
	return false;
}











