var NUMBER_FORMAT  = '###' + THOUSANDS_SEPARATOR + 
                     '###' + THOUSANDS_SEPARATOR + 
                     '###' + THOUSANDS_SEPARATOR +
                     '##0';
var DECIMAL_FORMAT = NUMBER_FORMAT + DECIMAL_SEPARATOR + '00';

function loadPage(page, action) {
	var frm = document.forms['main'];
	if(!frm || !frm.elements['page']) return;
	if(action) frm.action = action;
	frm.elements['page'].value = page;
	mainSubmitted(frm);
	frm.submit();
}

function submitMain(action) {
	var frm = document.forms['main'];
	if(!frm || !frm.elements['action']) return;
	frm.elements['action'].value = action;
	frm.submit();
}

function loadSection(section, subsection, action) {
	var frm = document.forms['main'];
	if(!frm || !frm.elements['action'] || !frm.elements['section']) return;
	frm.elements['action'].value = action ? action : 'loadsection';
	frm.elements['section'].value = section;
	if(frm.elements['subsection'])
		frm.elements['subsection'].value = subsection ? subsection : '';
	mainSubmitted(frm);
	frm.submit();
}

function changeAction(action) {
	var frm = document.forms['main'];
	if(!frm || !frm.elements['action']) return;
	frm.elements['action'].value = action;
}

function mainSubmitted(frm) {
	if(frm.elements['criterio'] && frm.elements['type']) {
		var criterioType = frm.elements['type'].value;
		if(criterioType == 'list') {
			listSubmitted(frm);
		} else if(criterioType == 'range-list') {
			rangeListSubmitted(frm);
		} else if(criterioType == 'range-map') {
			rangeMapSubmitted(frm);
		} else if(criterioType == 'map') {
			mapSubmitted(frm);
		}
	}
	return true;
}

function listSubmitted(frm) {
	if(!frm || !frm.elements['selected-list'] || !frm.elements['expanded-list']) return;

	var i, arr, as, a, pa, key, dash, imgs, img, selected, expanded;

	// to avoid duplicates place ids in an array, first
	selected = '';
	as = document.anchors;
	for(i = 0; i < as.length; i++) {
		a = as[i];
		if(a.name && a.className && a.className.indexOf('selected') != -1) {
			/*
			// avoid items which has parent that is selected
			ul = parent_with_name(a, 'ul');
			if(ul) {
				pa = previous_with_name(ul, 'a');
				if(pa && pa.className && pa.className.indexOf('selected') != -1)
					continue;
			}
			*/
			key = a.name;
			dash = key.indexOf('_');
			if(dash != -1)
				key = key.substr(dash + 1);
			if(selected.length > 0) selected += ':';
			selected += key;
		}
	}
	frm.elements['selected-list'].value = selected;
	
	// fill expanded items list
	expanded = '';
	imgs = document.images;
	for(i = 0; i < imgs.length; i++) {
		img = imgs[i];
		if(img.name && img.className && img.className.indexOf('expanded') != -1) {
			//a = next_with_name(img, 'a');
			//if(!a || !a.name) continue;
			key = img.name;
			dash = key.indexOf('_');
			if(dash != -1)
				key = key.substr(dash + 1);
			if(expanded.length > 0) expanded += ':';
			expanded += key;
		}
	}
	frm.elements['expanded-list'].value = expanded;
}

function rangeMapSubmitted(frm) {
	if(!frm || !frm.elements['selected-map']) return;
}

function rangeListSubmitted(frm) {
	if(!frm || !frm.elements['selected-list']) return;
	
	var ranges = new Object();
	var els = frm.elements;
	for(var i = 0; i < els.length; i++) {
		var el = els[i];
		var val = null;
		if(el.tagName.toLowerCase() == 'select') {
			val = el.options[el.selectedIndex].value;
		} else if(el.tagName.toLowerCase() == 'input' 
					&& (el.type.toLowerCase() == 'text' || el.type.toLowerCase() == 'hidden')) {
			val = el.value;
		}
		if(val == null) continue;
		var rangeId = substringBefore(el.name, '-');
		var range = ranges[rangeId];
		if(!range) {
			range = new Range();
			ranges[rangeId] = range;
		}
		if(endsWith(el.name, '-name')) {
			range.name = val;
		} else if(endsWith(el.name, '-type')) {
			range.type = val;
		} else if(endsWith(el.name, '-ctx')) {
			range.context = val;
		} else if(endsWith(el.name, '-min')) {
			range.min = numberValue(val);
		} else if(endsWith(el.name, '-max')) {
			range.max = numberValue(val);
		}
	}
	var map = '';
	for(rangeId in ranges) {
		var range = ranges[rangeId];
		if(range.min == 0 && range.max == 0) continue;
		entry = '[name=' + range.name 
					+ '|type=' + range.type 
					+ '|context=' + range.context 
					+ '|min=' + range.min 
					+ '|max=' + range.max + ']' 
		
		if(map.length > 0) map += ':';
		map += entry;
	}
	els['selected-list'].value = map;
}

function mapSubmitted(frm) {
	if(!frm || !frm.elements['selected-map']) return;
	
	var i, map, els, el, val;
	map = '';
	els = frm.elements;
	for(i = 0; i < els.length; i++) {
		el = els[i];
		val = null;
		if(el.tagName.toLowerCase() == 'select') {
			val = el.options[el.selectedIndex].value;
		} else if(el.tagName.toLowerCase() == 'input' 
					&& (el.type.toLowerCase() == 'text' || el.type.toLowerCase() == 'hidden')) {
			val = el.value;
		}
		if(val == null) continue;
		if(endsWith(el.name, '-min') || endsWith(el.name, '-max')) {
			val = numberValue(val);
			if(val != 0) {
				if(map.length > 0) map += ':';
				map += el.name + '=' + val;
			}
		} else if(el.type.toLowerCase() != 'hidden') {
			if(val.length != 0) {
				if(map.length > 0) map += ':';
				map += el.name + '=' + val;
			}
		}
	}
	els['selected-map'].value = map;
}

function elementValue(els, name) {
	if(els[name] && els[name].value) {
		return els[name].value;
	} else {
		var i;
		for(i = 0; i < els.length; i++) {
			var el = els[i];
			if((el.tagName.toLowerCase() == 'select') && (el.name == name)) {
				if(el.name == name) {
					return el.options[el.selectedIndex].value;
				}
			} else if(el.tagName.toLowerCase() == 'input' 
						&& (el.type.toLowerCase() == 'text' || el.type.toLowerCase() == 'hidden')
						&& (el.name == name)) {
				return el.value;
			}
		}
	}
	return null;
}

function startOver(start) {
	var frm = document.forms['main'];
	if(!frm || !frm.elements['start']) return;
	frm.elements['start'].value = parseInt(start);
	frm.submit();
}

function toggleAll(src) {
	checkAll(src.checked);
}

function selectAll() {
	checkAll(true);
}

function deselectAll() {
	checkAll(false);
}

function checkAll(onoff) {
	var frm = document.forms['main'];
	if(!frm) return;
	var i, els, el;
	els = frm.elements;
	for(i = 0; i < els.length; i++) {
		el = els[i];
		if(!el.name || !startsWith(el.name, 'chk_')) continue;
		if(el.checked != onoff)
			el.checked = onoff;
	}
}

function changeViewMode(mode) {
	var frm = document.forms['main'];
	if(!frm || !frm.elements['viewmode']) return;
	frm.elements['viewmode'].value = mode;
	frm.elements['start'].value = 0;
	frm.submit();
}

function removeSelected(item) {
	var frm = document.forms['main'];
	if(!frm || !frm.elements['action'] || !frm.elements['listItem']) return;
	frm.elements['action'].value = 'removeselected';
	frm.elements['listItem'].value = item;
	frm.submit();
}

function purchaseSelected() {
	var frm = document.forms['main'];
	if(!frm || !frm.elements['action'] || !frm.elements['section']) return;
	frm.elements['action'].value = 'purchaseSelected';
	frm.elements['section'].value = 'purchase';
	frm.submit();
}

function targetAction(action, target, np) {

	var frm = document.forms['main'];
	if(!frm) return;
	var els = frm.elements;
	els['action'].value = action;
	if(target) els['target'].value = target;
	if(np) {
		els['page'].value = np;
		if(els['start']) els['start'].value = 0;
	}
	frm.submit();
	
}

function selectSection(section) {

	var frm = document.forms['main'];
	if(!frm || !frm.elements['section']) return;
	frm.elements['section'].value = section;
	frm.submit();
	
}

function addReportElement(id, ref, taxonomy, context) {

	var frm = document.forms['main'];
	if(!frm) return;
	var anchor;
	if(document.all)
		anchor = document.anchors(id);
	else
		anchor = document.anchors[id];
	if(!anchor) return;
	frm.elements['action'].value = 'addElement';
	frm.elements['target'].value = ref;
	frm.elements['taxonomy'].value = (taxonomy) ? taxonomy : '';
	frm.elements['context'].value = (context) ? context : '';
	frm.elements['label'].value = (anchor) ? anchor.firstChild.data : '';
	frm.submit();
	
}

function selectProduct(id, mode) {
	var frm = document.forms['main'];
	if(!frm || !frm.elements['chk_'+id]) return;
	var chk = frm.elements['chk_'+id];
	var count = parseInt(frm.elements['selectedCount'].value);
	var src = get_object('prd_'+id);
	var img = child_with_name(src, 'img');
	var newCount = count;
	if((mode == -1 || mode == 1) && src.className.indexOf('selected') == -1) {
		src.className = addClass(src.className, 'selected');
		var src = img.src;
		img.src = img.src.substring(0, src.lastIndexOf('.')) + '-selected' + img.src.substring(src.lastIndexOf('.'));
		chk.checked = true;
		newCount++;
	} else if((mode == -1 || mode == 0) && src.className.indexOf('selected') != -1) {
		src.className = removeClass(src.className, 'selected');
		img.src = img.src.replace("-selected.", ".");
		chk.checked = false;
		newCount--;
	}
	if(count > 0 && newCount == 0) {
		var imgList = get_object('purchasebtn');
		if(imgList)
			for(var i = 0; i < imgList.length; i++)
			 imgList[i].src = imgList[i].src.replace(".","-disabled.");
	} else if(count == 0 && newCount > 0) {
		var imgList = get_object('purchasebtn');
		if(imgList)
			for(var i = 0; i < imgList.length; i++)
			 imgList[i].src = imgList[i].src.replace("-disabled.",".");
	}
	frm.elements['selectedCount'].value = newCount;
}

function purchaseProducts() {
	var frm = document.forms['main'];
	if(!frm || !frm.elements['selectedCount']) return;
	var count = parseInt(frm.elements['selectedCount'].value);
	if(count > 0) {
		loadPage('cart');
	}
}

function selectAllProducts() {
	checkAllProducts(true);
}

function deselectAllProducts() {
	checkAllProducts(false);
}

function checkAllProducts(onoff) {
	var frm = document.forms['main'];
	if(!frm) return;
	var i, els, el;
	els = frm.elements;
	for(i = 0; i < els.length; i++) {
		el = els[i];
		if(!el.type || el.type != 'checkbox' || !startsWith(el.name,'chk_')) continue;
		selectProduct(el.name.substr(4), onoff ? 1 : 0);
	}
}

function inputChanged(e) {
	var target = (window.event) ? window.event.srcElement : e.target;
	if(!target) return;
}

function inputFocused(e) {
	var target = (window.event) ? window.event.srcElement : e.target;
	if(!target) return;
	if(target.className.indexOf('monetary') >= 0 || 
	   target.className.indexOf('signedMonetary') >= 0 ||
	   target.className.indexOf('decimal') >= 0 || 
	   target.className.indexOf('integer') >= 0 || 
	   target.className.indexOf('duration') >= 0 || 
	   target.className.indexOf('percent') >= 0) {
		target.value = unFormatNumber(target.value);
	}
	//target.select();
}

function inputBlured(e) {
	var target = (window.event) ? window.event.srcElement : e.target;
	if(!target) return;
	
	if(target.value.length == 0 && target.className.indexOf('required') == -1)
		return;
		
	if(target.className.indexOf('monetary') >= 0 || 
	   target.className.indexOf('signedMonetary') >= 0 || 
	   target.className.indexOf('percent') >= 0 || 
	   target.className.indexOf('decimal') >= 0) {
		var fmtValue = formatNumber(target.value, DECIMAL_FORMAT);
		if(fmtValue != null) target.value = fmtValue;
	} else if(target.className.indexOf('integer') >= 0 || 
	          target.className.indexOf('duration') >= 0) {
		var fmtValue = formatNumber(target.value, NUMBER_FORMAT);
		if(fmtValue != null) target.value = fmtValue;
	}
}

function acceptsSign(obj) {

	return (obj.className && (
	        obj.className.indexOf('integer') >= 0 ||
	        obj.className.indexOf('decimal') >= 0 || 
	        obj.className.indexOf('double') >= 0 || 
	        obj.className.indexOf('float') >= 0 )
	       ) ? true : false;
}

function inputOnKeyPress(e) {
	var target = (window.event) ? window.event.srcElement : e.target;
	
	var validchars = '0123456789';
	if(target.className.indexOf('date') >= 0) {
		validchars += DATE_SEPARATOR;
	} else if(target.className.indexOf('monetary') >= 0 ||
	          target.className.indexOf('decimal') >= 0 || 
	          target.className.indexOf('double') >= 0 || 
	          target.className.indexOf('percent') >= 0 || 
	          target.className.indexOf('float') >= 0) {
		validchars += DECIMAL_SEPARATOR + '-';
	} else if(target.className.indexOf('duration') >= 0 || 
	          target.className.indexOf('integer') >= 0) {
		validchars += '';
	} else {
		// not need to be checked as numeric
		return;
	}
	
	if(window.event) {
		if(DECIMAL_SEPARATOR != '.' && window.event.keyCode == '.'.charCodeAt(0)) window.event.keyCode = DECIMAL_SEPARATOR.charCodeAt(0); // change . to DECIMAL_SEPARATOR
		var keyChar = String.fromCharCode(window.event.keyCode);
		if(keyChar == MINUS_SIGN && acceptsSign(target) && target.value.length == 0)
			window.event.returnValue = true;
		if(validchars.indexOf(keyChar) >= 0)
			window.event.returnValue = true;
		else
			window.event.returnValue = false;
	} else {
		if(e.charCode) {	
			if(DECIMAL_SEPARATOR != '.' && e.charCode == '.'.charCodeAt(0)) e.charCode = DECIMAL_SEPARATOR.charCodeAt(0); // change . to DECIMAL_SEPARATOR
			var keyChar = String.fromCharCode(e.charCode);
			if(keyChar == MINUS_SIGN && acceptsSign(target) && (target.value.length == 0 || ((target.selectionEnd - target.selectionStart) == target.value.length)) ) {
			return;				
			} else if(validchars.indexOf(keyChar) < 0) {
				e.preventDefault();

			}
		}
	}
}


