var DIGITS = "0123456789";
var UPPER_LATIN_LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var UPPER_GREEK_LETTERS = "ÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÓÔÕÖ×ØÙÓÁÅÇÉÏÕÙÁÅÇÉÉÉÏÕÕÕÙ";
var LOWER_LATIN_LETTERS = "abcdefghijklmnopqrstuvwxyz";
var LOWER_GREEK_LETTERS = "áâãäåæçèéêëìíîïðñóôõö÷øùò¢¸¹º¼¾¿ÜÝÞßúÀüýûàþ";
var LOWER_LETTERS = LOWER_LATIN_LETTERS + LOWER_GREEK_LETTERS;
var UPPER_LETTERS = UPPER_LATIN_LETTERS + UPPER_GREEK_LETTERS;
var INTEGER_FORMAT = '###.###.###.##0';
var DECIMAL_FORMAT = '###.###.###.##0,00';

function gotoPage(nextPage) {
	if(!frm) frm = document.forms[formName];
	frm.elements['action'].value = 'navigate';
	frm.elements['nextPage'].value = nextPage;
	frm.submit();
}

function setAction() {
	if(!frm) frm = document.forms[formName];
	if(arguments.length == 0) return;
	
	if(arguments.length > 0) {
		frm.elements['action'].value = arguments[0];
	}
	if(arguments.length > 1) {
		frm.elements['target'].value = arguments[1];
	}
	if(arguments.length > 1) {
		frm.elements['index'].value = arguments[2];
	}
	frm.submit();
}


function refresh() {
	if(!frm) frm = document.forms[formName];
	frm.elements['refresh'].value = 'true';
	frm.submit();
}

function printerFriendly() {
	if(!frm || !frm.elements['format']) {
		window.location = selectedPage + '.do?format=print';
		return true;
	}
	frm.elements['format'].value = 'print';
	frm.submit();
	return true;
}

function exportPdf() {
	if(!frm || !frm.elements['format']) return false;
	frm.action = 'generate.do';
	frm.elements['format'].value = 'pdf';
	frm.submit();
	return true;
}

function exportTiff() {
	if(!frm || !frm.elements['format']) return false;
	frm.action = 'generate.do';
	frm.elements['format'].value = 'tiff';
	frm.submit();
	return true;
}

function signOn() {
	if(!frm) return false;
	frm.action = 'j_security';
	frm.submit();
	return true;
}

function setOrderBy(orderBy) {
	if(!frm) frm = document.forms[formName];
	if(frm.elements['orderBy'].value == orderBy)
		frm.elements['descending'].value = 
			(frm.elements['descending'].value == 'false') ? 'true' : 'false';
	else
		frm.elements['orderBy'].value = orderBy;
	frm.submit();
}

function openPopup(url, name, w, h, r) {
	var popup = null;
	var opt;
	if(!name) name = 'popup';
	if(w) opt += 'width=' + w;
	if(!h) opt += 'height=' + h;
	if(r) opt += 'scrollbars=yes,status=yes,resizable=yes,toolbar=yes,location=yes'
	else opt += 'scrollbars=no,status=no,resizable=no,toolbar=no,location=no';
   popup = window.open(file,title, ",width=476,height=320");
	popup.focus();
}

function toggleCheck(src, name) {
	var els = src.form.elements;
	for(var i = 0; i < els.length; i++) {
		var inp = els[i];
		if(inp.name && inp.name == name)
			inp.checked = src.checked;
	}
}

function hoverCell(obj, on) {
	if(obj.className.indexOf('disabled') != -1) return;
	obj.className = changeClass(obj.className, 'hovered', !on);
}

function hasMultipleInput(frm) {
	var els = frm.elements;
	var len = els.length;
	var isFirst = true;
	for (var i = 0; i < len; i++) {
		if (isInputText(els[i])) {
			if(isFirst)
				isFirst = false;
			else
				return true;
		}
	}
	return false;
}

function isInputText(src) {
	return (src.nodeName && (src.nodeName.toLowerCase() == 'input' && src.type == 'text')
		||  src.nodeName.toLowerCase() == 'textarea');
}

function isInputAccessible(src) {
	if((src.type && src.type == 'hidden') 
			|| (src.nodeName.toLowerCase() == 'input' && (src.readOnly || src.disabled)))  {
		return false;
	} else {
		var obj = src;
		while(obj) {
			if(hasClass(obj.className,'hidden')) return false;
			obj = obj.parentNode;
		}
	}
	return true;
}

function isInputReadOnly(src) {
	if(src.nodeName && src.nodeName.toLowerCase() == 'input')
		return src.readOnly;
	else
		return false;
}

function isRadioChecked(frm, name, value) {
	var els = frm.elements;
	var len = els.length;
	for (var i = 0; i < len; i++) {
		if (els[i].name == name && els[i].checked && els[i].value == value) {
			return true;
		}
	}
	return false;
}

function navigate(forward, target) {
	if(!target || !target.name) return;
	var els = target.form.elements;

	var start = 0;
	for(var i = 0; i < els.length; i++) {
		var el = els.item(i);
		if(el.name == target.name) {
			start = i;
			break;
		}
	}
	
	if(forward) {
		for(var i = start + 1; i < els.length; i++) {
			var el = els.item(i);
			if(el.name == target.name) continue;
			var canFocus = isInputAccessible(el);
			if(canFocus) {
				try { 
					el.focus(); 
				} catch (e) { 
					// IGNORE
				}
				return true;
			}
		}
	} else {
		for(var i = start - 1; i >= 0; i--) {
			var el = els.item(i);
			if(el.name == target.name) continue;
			var canFocus = isInputAccessible(el);
			if(canFocus) {
				try { 
					el.focus(); 
				} catch (e) { 
					// IGNORE
				}
				return true;
			}
		}
	}
	return false;
}

var optionsList = null;
var optionLabel = null;
var optionInput = null;
function showOptions() {
	optionsList = (arguments.length > 0) ? get_object(arguments[0]) : null;
	optionLabel = (arguments.length > 1) ? get_object(arguments[1]) : null;
	optionInput = (arguments.length > 2) ? get_object(arguments[2]) : null;
	if(!optionLabel || !optionsList) return;
	var x = AnchorPosition_getPageOffsetLeft(optionLabel);
	var y = AnchorPosition_getPageOffsetTop(optionLabel);
	optionsList.style.left = x + "px";
	optionsList.style.top = (y + optionLabel.offsetHeight) + "px";
	optionsList.style.width = optionLabel.offsetWidth > 50 ? (optionLabel.offsetWidth - 2) + "px" : "";
	if(!optionsList.style.visibility || optionsList.style.visibility == 'hidden')
		optionsList.style.visibility = 'visible';
	else
		optionsList.style.visibility = 'hidden';
}

function selectOption(optionid) {
	var option = get_object(optionid);
	if(!optionLabel || !optionsList || !optionInput || !option) return;
	var inp = get_object(optionLabel.htmlFor);
	optionLabel.firstChild.data = option.title + ' ';
	optionsList.style.visibility = 'hidden';
	optionInput.value = optionid.substr(optionid.indexOf('_')+1);
	if(inp) inp.focus();
	optionsList = null;
	optionLabel = null;
}

function initKeyEvents() {

	documentKeys = new keyEvents();

	if(document.all) {
		documentKeys.addKey(13, enterPressed, '');
		//documentKeys.addKey(38, upPressed   , '');
		//documentKeys.addKey(40, downPressed , '');
	}
		
	document.onkeydown = function(evt) { documentKeys.keyEvent(evt); }
//	onLoad();
}



// Document Events

function documentLoaded(e) {
	initKeyEvents();
}

// Input Events

function inputChanged(e) {
	var target = (e.target) ? e.target : e.srcElement;
	if(!target || !target.name) return;

	var frm = target.form;
	
	switch(target.name) {
		
	default:
		break;
	}

	if(frm.elements['dirty'])
		frm.elements['dirty'].value = 1;
	
}

function inputFocused(e) {
	var target = (e.target) ? e.target : e.srcElement;
	if(!target) return;

	//target.style.backgroundColor = '#f6f6e6';
	//target.style.borderStyle = 'solid';
	//target.style.borderColor = '#90896B';
	//target.style.color = '#003399';
	
	if(hasClass(target.className, 'currency')
			|| hasClass(target.className, 'decimal')) {
		target.value = unFormatNumber(target.value, 2);
	}
	if(isInputText(target)) {
		try {
			target.select();
		} catch(e) {
			// IGNORE
		}
	}
}

function inputBlured(e) {
	var target = (e.target) ? e.target : e.srcElement;
	if(!target) return;

	//target.style.backgroundColor = '';
	//target.style.borderStyle = '';
	//target.style.borderColor = '';
	//target.style.color = '';
	
	if(hasClass(target.className, 'currency')
			|| hasClass(target.className, 'decimal')) {
		var fmtValue = formatNumber(unFormatNumber(target.value, 2), DECIMAL_FORMAT);
		if(fmtValue != null && target.value != fmtValue)
			target.value = fmtValue;
	} else if(hasClass(target.className, 'taxnumber')) {
		if(target.value.length > 0) target.value = leftPad(target.value, 9, '0');
	} else if(hasClass(target.className, 'date')) {
		var dateValue = parseDate(target.value, true);
		target.value = (dateValue) ? formatDate(dateValue, DATE_FORMAT)  : '';
	}
}

function inputOnKeyDown(e) {

	if(documentKeys.keyEvent(e)) {
		if(e.target) {
			e.preventDefault();
			e.stopPropagation();
		}
	}
	
}

function inputOnKeyPress(e) {
	var target = (e.target) ? e.target : e.srcElement;

	if(e.ctrlKey || e.altKey) return;

	// NS must handle up/down keys in key press event
	if(e.keyCode == 13) {
		enterPressed(e);
		return;
	} else if(e.keyCode == 38) {
		upPressed(e);
		return;
	} else if(e.keyCode == 40) {
		downPressed(e);
		return;
	}
	
	var validchars = '';
	if(hasClass(target.className, 'number') || hasClass(target.className, 'digits'))
		validchars += DIGITS;
	else if(hasClass(target.className, 'date'))
		validchars = DIGITS + DATE_SEPARATOR;
	else if(hasClass(target.className, 'currency') || hasClass(target.className, 'decimal'))
		validchars = DIGITS + DECIMAL_SEPARATOR + MINUS_SIGN;
	else if(hasClass(target.className, 'phonenumber'))
		validchars = DIGITS + ' ';
	if(hasClass(target.className, 'email'))
		validchars += UPPER_LATIN_LETTERS + DIGITS + '@.';
	else if(hasClass(target.className, 'uppercase'))
		validchars += UPPER_LETTERS + ' ';
	if(hasClass(target.className, 'dotted'))
		validchars += '.';
	if(validchars.length == 0)
		return;

	if(document.all) {
		var keyChar = String.fromCharCode(e.keyCode);
		if((hasClass(target.className, 'currency') || hasClass(target.className, 'decimal')) 
				&& DECIMAL_SEPARATOR != '.' && keyChar == '.') {
			e.keyCode = 44; // change . to ,
		} else if(hasClass(target.className, 'uppercase') && ((pos = LOWER_LETTERS.indexOf(keyChar)) != -1)) {
			e.keyCode = UPPER_LETTERS.substring(pos, pos + 1).charCodeAt(0); // change lower to upper
		} else {
			if(validchars.indexOf(keyChar) >= 0)
				e.returnValue = true;
			else
				e.returnValue = false;
		}
	} else if(e.charCode) {
		var keyChar = String.fromCharCode(e.charCode);
		if((hasClass(target.className, 'currency') || hasClass(target.className, 'decimal'))
				&& DECIMAL_SEPARATOR != '.' && keyChar == '.') {
			e.preventDefault();
			target.value = 
				target.value.substring(0, target.selectionStart) 
					+ ',' + target.value.substring(target.selectionEnd);
		} else if(hasClass(target.className, 'uppercase') && ((pos = LOWER_LETTERS.indexOf(keyChar)) != -1)) {
			e.preventDefault();
			target.value = 
				target.value.substring(0, target.selectionStart) 
					+ UPPER_LETTERS.substring(pos, pos + 1) + target.value.substring(target.selectionEnd);
		} else {
			if(validchars.indexOf(keyChar) < 0) {
				e.preventDefault();
			}
		}
	}
}

// Key Events

function enterPressed(e) {
	var target = (e.target) ? e.target : e.srcElement;

	if(target.name && target.name.toLowerCase().indexOf('filter') != -1)
		target.form.submit();
		
	if(!hasMultipleInput(target.form))
		return;

	if(e.shiftKey)
		navigate(false, target);
	else
		navigate(true, target);
	
	if(e.target) {
		e.preventDefault();
		e.stopPropagation();
	} else {
		e.returnValue = false;
		return false;
	}

}

function downPressed(e) {
	var target = (e.target) ? e.target : e.srcElement;

	if(isInputQuantity(target))
		spin(target.name, -1);
	else
		navigate(true, target);

	if(e.target) {
		e.preventDefault();
		e.stopPropagation();
	}
}

function upPressed(e) {
	var target = (e.target) ? e.target : e.srcElement;

	if(isInputQuantity(target))
		spin(target.name, 1);
	else
		navigate(false, target);

	if(e.target) {
		e.preventDefault();
		e.stopPropagation();
	}
}

function approvedQtyChanged(target) {
	var frm = target.form;
	var els = frm.elements;
	var productId = target.id.substring(target.id.indexOf('_')+1, target.id.lastIndexOf('_'));
	
	var previousAvailableQty = 0;
	var previousAvailableEl = get_object('previous_available_' + productId);
	if(previousAvailableEl)
		previousAvailableQty = parseFloat(unFormatNumber(data_of(previousAvailableEl.firstChild)));

	var availableQty = 0;
	var availableEl = get_object('available_' + productId);
	if(availableEl)
		availableQty = parseFloat(unFormatNumber(data_of(availableEl.firstChild)));
	
	var approvedQty = 0;
	var approvedEl = get_object('approved_' + productId);
	if(approvedEl)
		approvedQty = parseFloat(unFormatNumber(data_of(approvedEl.firstChild)));

	var previousRemainingQty = 0;
	var previousRemainingEl = get_object('previous_remaining_' + productId);
	if(previousRemainingEl)
		previousRemainingQty = parseFloat(unFormatNumber(data_of(previousRemainingEl.firstChild)));

	var remainingQty = 0;
	var remainingEl = get_object('remaining_' + productId);
	if(remainingEl)
		remainingQty = parseFloat(unFormatNumber(data_of(remainingEl.firstChild)));
	
	var qty = 0;
	for(var i = 0; i < els.length; i++) {
		var el = els[i];
		if(el.id && startsWith(el.id, 'qty_' + productId + '_')) {
			qty += parseFloat(unFormatNumber(el.value));
		}
	}
	
	if(approvedEl)
		approvedEl.firstChild.data = '' + qty;
		
	if(previousRemainingEl) {
		var previousRemainingQty = previousAvailableQty - qty;
		if(previousRemainingQty < 0)
			previousRemainingEl.style.color = 'red';
		else
			previousRemainingEl.style.color = '';
		if(previousRemainingQty == Math.round(previousRemainingQty))
			previousRemainingEl.firstChild.data = '' + formatNumber(previousRemainingQty, INTEGER_FORMAT);
		else
			previousRemainingEl.firstChild.data = '' + formatNumber(previousRemainingQty, DECIMAL_FORMAT);
	}

	if(remainingEl) {
		var remainingQty = availableQty - qty;
		if(remainingQty < 0)
			remainingEl.style.color = 'red';
		else
			remainingEl.style.color = '';
		if(remainingQty == Math.round(remainingQty))
			remainingEl.firstChild.data = '' + formatNumber(remainingQty, INTEGER_FORMAT);
		else
			remainingEl.firstChild.data = '' + formatNumber(remainingQty, DECIMAL_FORMAT);
	}
}

var squareBannerIdx = 0;
var squareBanners = [
		'http://www.kariera.gr/Main/Imgs/Seminars/SemimarsSchedule.pdf|media/karieralight-banner.jpg',
		'http://www.marketingweek.gr|media/marketingweek.gif'
	];
var verticalBannerIdx = 0;
var verticalBanners = [
		'http://www.eco.gr|media/eco.gif',
		'http://www.vodafone.gr|media/vodafone-banner.gif'
	];
var guideBannerIdx = 0;
var bannerRefreshTimeout = 14000;

/*
function onLoad() {

	var squareBanner = get_object('squareBanner');
	if(squareBanner != null) {
		showBanner(squareBanner, squareBanners[squareBannerIdx]);
		if((squareBannerIdx + 1) < squareBanners.length) {
			squareBannerIdx++;
		} else {
			squareBannerIdx = 0;
		}
	}
			
	var verticalBanner = get_object('verticalBanner');
	if(verticalBanner != null) {
		showBanner(verticalBanner, verticalBanners[verticalBannerIdx]);
		if((verticalBannerIdx + 1) < verticalBanners.length) {
			verticalBannerIdx++;
		} else {
			verticalBannerIdx = 0;
		}
	}

	var guideBanner = get_object('guideBanner');
	if(guideBanner != null) {
		showBanner(guideBanner, 'resources/guide-book' + (guideBannerIdx + 1) + '.jpg');
		if((guideBannerIdx + 1) < 4) {
			guideBannerIdx++;
		} else {
			guideBannerIdx = 0;
		}
	}
	setTimeout("onLoad()", bannerRefreshTimeout); 
}

function showBanner(banner, info) {
	if(info.indexOf('|') == -1) {
		banner.src = info;
	} else {
	var parts = info.split('|');
	if(banner.href != parts[0]) {
		banner.href = parts[0];
	}
	if(banner.firstChild.src != parts[1]) {
		banner.firstChild.src = parts[1];
		}
	}
}
*/