function submitForm(form) {
	updateRowsCols(form, self);				// page navigation updates rows&cols
	form.submit();
}

function gotoFunction(sel) {
//	if (sel.options[sel.selectedIndex].value!='') {
		updateRowsCols(sel.form, self);		// combo boxes update rows&cols
		submitForm(sel.form);
//	}
}

function changeOffset(new_offset) {
	form = document.forms.OffsetForm;		// make sure there's OffsetForm in your HTML code
	if (form == null)
		return;
	form.offset.value = new_offset;
	submitForm(form);
}

function setFavOrAllAndSubmit(value) {
	form = document.forms.OffsetForm;		// make sure there's OffsetForm in your HTML code
	if (form == null)
		return;

	if (form.favorall)
		form.favorall.value = value;

	submitForm(form);
}

function compareCheckedItems(url) {
	return CheckNofSelectedAndSubmitWithUrl(2, url);
}

function submitWithUrl(url) {
	form = document.forms.OffsetForm;		// make sure there's OffsetForm in your HTML code
	if (form == null)
		return;
	form.action = url;                      // change submit URL
	submitForm(form);
}

function submitWithSearchMode(value) {
	form = document.forms.OffsetForm;		// make sure there's OffsetForm in your HTML code
	if (form == null)
		return;

	if (form.searchMode)
		form.searchMode.value = value;

	submitForm(form);
}

function CheckNofSelectedAndSubmitWithUrl(number, url) {
	form = document.forms.OffsetForm;		// make sure there's OffsetForm in your HTML code
	if (form == null)
		return;

	var warn = "Select at least ";
	if (number == 1)
		warn += "one item";
	else if (number == 2)
		warn += "two items";
	else
		warn += number + " items";
	if (getSelectedItemsCount(form.iid) < number) {
		alert(warn);
		return false;
	}

	submitWithUrl(url);
	return true;
}

function submitWithEvent(eventName) {
	form = document.forms.OffsetForm;		// make sure there's OffsetForm in your HTML code
	if (form == null)
		return false;

	updateRowsCols(form, self);				// page navigation updates rows&cols
	form.event.value = eventName;
	form.submit();
}

function addCheckedToFavorites() {
	return addCheckedWithEvent("addFavorites");
}

function removeCheckedFromFavorites() {
	return addCheckedWithEvent("removeFavorites");
}

function addCheckedWithEvent(eventName) {
	return addCheckedWithEventForItem(eventName, "iid");
}

function addCheckedWithEventForItem(eventName, itemName) {
	form = document.forms.OffsetForm;		// make sure there's OffsetForm in your HTML code
	if (form == null)
		return false;

	if (getSelectedItemsCount(form.elements[itemName]) < 1) {
		alert("Select at least one item");
		return false;
	}

	submitWithEvent(eventName);
	return true;
}

function addCheckedToRoom(formUrl) {
	form = document.forms.OffsetForm;		// make sure there's OffsetForm in your HTML code
	if (form == null)
		return false;

	if (getSelectedItemsCount(form.iid) < 1) {
		alert("Select at least one item");
		return false;
	}

	updateRowsCols(form, self);				// page navigation updates rows&cols
//	form.event.value = "";
	form.action = formUrl;
	form.target = "AddToRoom";
	self.open(null, form.target, "left=100, top=100, width=250, height=200");
	form.submit();
	return true;
}
/*
function submitFavoriteType(x) {
	form = document.forms.OffsetForm;		// make sure there's OffsetForm in your HTML code
	if (form == null)
		return false;

	updateRowsCols(form, self);				// page navigation updates rows&cols
	form.typeID.value=x;
	form.submit();
	return true;
}

function submitFavoriteRoom(x) {
	form = document.forms.OffsetForm;		// make sure there's OffsetForm in your HTML code
	if (form == null)
		return false;

	updateRowsCols(form, self);				// page navigation updates rows&cols
	form.roomID.value=x;
	form.submit();
	return true;
}
*/
function removeCheckedItems() {
	form = document.forms.OffsetForm;		// make sure there's OffsetForm in your HTML code
	if (form == null)
		return;

	var selected = getSelectedItemsCount(form.iid);

	if (selected < 1) {
		alert("Select at least one item");
		return false;
	}

	if (form.iid.length == selected) {
		alert("You cannot remove all items, please uncheck at least one item");
		return false;
	}

	// use a trick - submit checked only those items that you want to keep preserved
	// i.e. - invert the selection and the user selected items get forgotten
	invertSelection(form.iid);

	form.submit();

	// invert it back to original state so user doesn't get confused
	invertSelection(form.iid);

	return true;
}
/*
function showInfoAboutSelectedItem(url) {
	form = document.forms.OffsetForm;		// make sure there's OffsetForm in your HTML code
	if (form == null)
		return;

	if (getSelectedItemsCount(form.iid) != 1) {
		alert("Select just one item");
		return false;
	}

	updateRowsCols(form, self);				// page navigation updates rows&cols
	form.action = url;                      // change submit URL
	form.submit();
	return true;
}
*/

// switches display style between 'block' and 'none'
// return false if element doesn't exist, true otherwise
function displayElement(elementID, itemNo, show) {
	var element = document.getElementById(elementID+itemNo);
	if (element) {
		if (element.style) {
			element.style.display = show ? "block" : "none";
		}
		return true;
	}
	return false;
}

// suitable for item_info_mouseovertitle.ssi
function displayItemInfo(item, show) {
	displayElement("itemInfo", item, show);
	displayElement("defaultItemInfoAreaText","",!show);
}

function displayItemInfoForever(item) {
	var i = 0;
	while(displayElement("itemInfo", i, i == item)) {
		i++;
	}
}

function changeBYOsubselect(sele) {
	// hide all BYO selects
//!! How to find the number of all BYO selects? Is it same as sele.length? Probably yes, otherwise indexing would not work
	for(i=0; i<5; i++) // FIXME! 5 should be replaced with something more dynamic
		displayElement("buildYourOwnSelect", i, false);

	// find selected manufacturer
	var item = sele.options[sele.selectedIndex].value;

	// display appropriate BYO SELECT
	displayElement("buildYourOwnSelect", item, true);
}

function isMicroshitExploder()
{
	if (navigator.appName == "Microsoft Internet Explorer")
		return 1;
	else
		return 0;
}

function getWindowWidth(win)
{
	if (!isMicroshitExploder())
		return win.innerWidth;
	else
		return win.document.body.clientWidth;	// screen.availWidth
}

function getWindowHeight(win)
{
	if (!isMicroshitExploder())
		return win.innerHeight;
	else
		return win.document.body.clientHeight;
}

function updateRowsCols(form, win) {
	if (form.ClientWidth)
		form.ClientWidth.value = getWindowWidth(win);
	if (form.ClientHeight)
		form.ClientHeight.value = getWindowHeight(win);
}

function OpenPage(newwin,winname,pw,ph,bkg)
{
	var OURPARENTWINDOW = 'ePrevueNet';
	otevirac = self;
	if (otevirac.rodic != OURPARENTWINDOW) {
		// traverse through window list tree and find the top ePreVue window
		father = otevirac;
		while(father.opener != null) {
			father = father.opener;
			if (father.rodic == OURPARENTWINDOW) {
				otevirac = father;
				break;
			}
		}
	}

	// "8" and "32" are special Microshit offset constants tuned up on IE5.5/W98
	width = Math.min(pw, screen.availWidth-8);
	height = Math.min(ph, screen.availHeight-32);

	nw = otevirac.open(newwin,winname,"toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, left=screen.availLeft, top=screen.availTop, width="+width+", height="+height)

	if (bkg == true)
		nw.blur();
	else
		nw.focus();
}

function OpenImageWindow(newin)
{
	nw = window.open(newin,"","width=screen.availWidth, height=screen.availHeight, toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes")
	nw.focus();
}

function getSelectedItemsCount(formitem) {
	var selected = 0;
	if (formitem) {
		if (formitem.length) {
		    for(i=0;i<formitem.length;i++) {
	    		if (formitem[i].checked)
	        		selected++;
		    }
		}
		else {
			if (formitem.checked)
				selected++;
		}
	}
	return selected;
}

function invertSelection(formitem) {
	if (formitem) {
		if (formitem.length) {
			for(i=0;i<formitem.length;i++) {
				formitem[i].checked = !formitem[i].checked;
			}
		}
	}
}

// special functions for Redirect.html page
function checkResolutionAndColorDepth(form)
{
	// get the screen resolution information for statistics purpose
	form.ScreenWidth.value = screen.width;
	form.ScreenHeight.value = screen.height;
	if (isMicroshitExploder())
		form.ScreenDepth.value = screen.colorDepth;
	else
		form.ScreenDepth.value = screen.pixelDepth;
	form.ClientWidth.value = getWindowWidth(self);
	form.ClientHeight.value = getWindowHeight(self);

	if (form.ScreenWidth.value < 800) {
		alert("ePreVue was designed for screen resolution 800x600. Your detected screen resolution is lower than that.\n"+
			  "Please switch to 800x600 or higher resolution otherwise you would have to scroll within the browser window a lot.\n");
	}
	else if (form.ClientWidth.value < 761 || form.ClientHeight.value < 400) {
		// resize window to fullscreen automatically
		self.moveTo(screen.availLeft, screen.availTop)
		self.resizeTo(screen.availWidth, screen.availHeight);
		form.ClientWidth.value = getWindowWidth(self);
		form.ClientHeight.value = getWindowHeight(self);
	}
}

function doChecksAndReload(form, loc)
{
	if (form == null) {
		alert("We have a problem with missing form");
		if (loc != null && loc.replace != null) {
			loc.replace("http://www.eprevue.net/");
		}
		return false;
	}

	checkResolutionAndColorDepth(form);
	var url = form.action;
	if (url.indexOf('?') < 0)
		url += "?";
	else
		url += "&";
	for(i=0;i<form.length;i++) {
		if (i > 0)
			url += "&";
		url += form[i].name + "=" + form[i].value;
	}

	if (loc == null || loc.replace == null) {
		alert("We have a problem with location");
		return false;
	}
	loc.replace(url);  // this is better than form.submit since the [Back] button works
	// form.submit();
}
///
function validateMailAddr(emailad) {
	var exclude=/[^@\-\.\w]|^[_@\.\-]|[\._\-]{2}|[@\.]{2}|(@)[^@]*\1/;
	var check=/@[\w\-]+\./;
	var checkend=/\.[a-zA-Z]{2,4}$/;
	var arrayOfAddresses = emailad.split(',');
	for(var i=0; i < arrayOfAddresses.length; i++) {
	    if(((arrayOfAddresses[i].search(exclude) != -1)||(arrayOfAddresses[i].search(check)) == -1)||(arrayOfAddresses[i].search(checkend) == -1)) {
		    return false;
		}
	}
	return true;
}
/*
Notes:
'exclude' checks 5 conditions:
a) characters that should not be in the address
b) characters that should not be at the start
c) & d) characters that shouldn't be together
e) there's not more than one '@'
'check' checks there's at least one '@', later followed by at least one '.'
'checkend' checks the address ends with a period followed by 2 or 3 alpha characters
N.B. Javascript 1.2 only works with version 4 browsers and higher.
*/

function validateEmailForm(frm) {
	if (frm.addrTo) {
		if (frm.addrTo.value == "") {
			if (frm.copy2U.checked == false) {       // require To: address only if Copy To Yourself is NOT set
			    alert("Receiver's e-mail address is required");
			    return false;
		    }
		}
		else if (! validateMailAddr(frm.addrTo.value)) {
			alert("Receiver's e-mail address is not correct");
		    return false;
		}
	}
	if (frm.addrFrom.value == "") {
		alert("Your e-mail address is required");
		return false;
	}
	else if (! validateMailAddr(frm.addrFrom.value)) {
		alert("Your e-mail address is not correct");
		return false;
	}
	return true;
}

function validateLoginForm(frm) {
	if (frm.emailaddress.value == "") {
		alert("Your e-mail address is required");
		return false;
	}
	else if (! validateMailAddr(frm.emailaddress.value)) {
		alert("Your e-mail address is not correct");
		return false;
	}
	return true;
}


// special hack for LockBrowser from QCL Solutions

// Test for LockBrowser variable
var lockBrowser=false;

// This function tests to see if the page is running in lockbrowser, due to the nature of html events this
// function can't be called from the same event as the print function because the variable lockBrowser will
// not be set till the event is completed. This function should be run from onload.
function testForLockBrowser() {
  window.status="LockBrowser:Test";
// Optional line to make the status bar look normal
// window.status="Done.";
}

// This function is required and is executed by LockBrowser on the 'Test' command
function setLockBrowser() {
  lockBrowser=true;
}

//This is an example of a print function
function printPage() {
  if (lockBrowser) {
    window.status="LockBrowser:Print";
  }
  else {
    window.print();
  }
}

function report_error(msg, url, line)
{
	alert(msg + " at line " + line);
}

// self.onerror = report_error;

