	
	isNS4 = (document.layers) ? 1 : 0; 
	isIE  = (document.all) ? 1 : 0; 
	isW3C = (document.getElementById && !document.all) ? 1 : 0; 
	isIE4Mac = ((navigator.appVersion.indexOf("Mac") != -1) && (document.all) && !(document.getElementById)) ? 1 : 0; 
	userAgent = window.navigator.userAgent;
	browserVers = parseInt(userAgent.charAt(userAgent.indexOf("/")+1),10);
	
	
	if(isW3C){
		pre = 'document.getElementById("';
		post = '").style';
	}
	if(isNS4){
		pre = 'document.';
		post = '';
	}
	if(isIE){
		pre = 'document.all.';
		post = '.style';
	}

	
	var oShow = new Array();
	var oCart = new Array();
	var objProduct = new Array();
	var objShowcase = new Array();
	var objCart = new Array();
	var browseField = new Array(); 
	var sortedProducts = new Array();
	var foundProducts = new Array();
	var params = new Array();	
	var params2 = new Array();
	var oFilters = new Array();
	var curFilters = new Array();
	var oPrNdx = new Array();
	
	
	
	var ordAscending = 0; 
	var ordDescending = 1; 
	var modASCII = 0; 
	var modNumeric = 1; 
	var modDisabled = 2; 
	var modMultiASCII = 3; 
	var broInventory = 1; 
	var broShowcase = 2; 

	
	function replaceIds(array1, array2) {
		var dummy = new Array();
		for (var i=0; i < array1.length; i++) dummy[i] = array2[array1[i]];
		return dummy;
	}
		
		
	
	function addProductInfo(slide_image, slide_description) {
		oProd[curProductId].slide_image = slide_image;
		oProd[curProductId].slide_description = slide_description;
	}
	
	function slideShow (id, slide_image, slide_description) {
		this.id = id;
		this.slide_image = slide_image;
		this.slide_description = slide_description;
	}


	
	function inst2(name, sortmode) {
		this.name = name;
		this.sortmode = sortmode;
	}

	
	function inst3(language, category, platform, slots) {
		this.language = language;  
		this.category = category; 
		this.platform = platform; 
		this.slot = slots;
	}

	
	function inst4(url, params, values) {
		this.url = url;
		this.params = params;
		this.values = values;
	}


 function ndx(language, category, platform)
 {
	this.language = language; 
	this.category = category; 
	this.platform = platform; 
 }


	
	function createQueryStr(cartId, arg) {
		var result = "?";
		var separator = "&";
		var obj = objCart[cartId];
		if (obj.params.length != arg.length) return "";
		for (var i=0; i < obj.params.length; i++) {	
			if (i > 0) result = result + "&";
			result = result + obj.params[i] + "=" + arg[i];
		}
		return result;
	}

	function getShowcaseFilename(language, category, platform) {
		curLanguage = language;
		curCategory = category;
		curPlatform = platform;
		var showcaseId = getCurrentShowcase();
		if (showcaseId == -1) return "showcases.html";

		var showLanguage = languageNames[objShowcase[showcaseId].language];
		var showCategory = categoryNames[objShowcase[showcaseId].category]; 
		var showPlatform = platformNames[objShowcase[showcaseId].platform];
		var setLanguage = replaceStr(showLanguage, " ", "_");
		var setCategory = replaceStr(showCategory, " ", "_");
		var setPlatform = replaceStr(replaceStr(showPlatform, " ", "_"), "/", ",");
		var result = "_" + setLanguage + "-" + setCategory + "-" + setPlatform + ".html";
		return result;
	}
	
	function getInfoLink(productId) {
		var paramStr = "?cat=" + categoryNames[curCategory] + "&plat=" + platformNames[curPlatform] + "&lang=" + languageNames[curLanguage];
		return objProduct[productId].linkinfo + objProduct[productId].id + "-" + "info.html" + paramStr;
	}
	

function getBuyLinkEx(prefix) 
{
	var escapedParams ="";
	var paramStr="";
	if ( prefix.indexOf ("aitsafe") != -1 ) {
		paramStr = "?cat=" + categoryNames[curCategory] + "&plat=" + platformNames[curPlatform] + "&lang=" + languageNames[curLanguage];
		escapedParams = escape(paramStr);
	}	
	var result = prefix + escapedParams;
	return result;
}
	
	
	
	
	
	
	
	function parseParams(params, s) {
		var count = 0;
		var pos = 0; 
		var oldpos = 0;
		var chunk = "";
		var eqpos = 0;
		while (true) {
			oldpos = pos;
			pos = s.indexOf("&", oldpos+1); 
			if (pos < 0) { 
				params[count] = new Object();
				chunk = s.substr(oldpos+1);
				eqpos = chunk.indexOf("=");
				params[count].str = chunk;
				params[count].name = chunk.substring(0, eqpos);
				params[count].value = chunk.substr(eqpos+1);
				count++;
				break;
			}	
			params[count] = new Object();
			chunk = s.substring(oldpos+1, pos);
			eqpos = chunk.indexOf("=");
			params[count].str = chunk;
			params[count].name = chunk.substring(0, eqpos);
			params[count].value = chunk.substr(eqpos+1);
			count++;
		}
	}	
	
	function getFilename() {
		var str = self.location.pathname; 
		
		var n3 = str.lastIndexOf("?");
		if (n3 > 0) str = str.substring(0, n3); 
		
		var n1 = str.lastIndexOf("/");
		var n2 = str.lastIndexOf("\\");
		var n = Math.max(n1, n2);
		var filename = str.substr(n + 1); 
		return filename;
	}

	var helpwindow;
	function getHelp(id) {
		var paramStr = "?id=" + id;
		if (id == '') paramStr = '';
		helpwindow = window.open(baseDir + "help/help.htm" + paramStr, "Help", "toolbar=0,scrollbars=1,statusbar=no,width=650,height=500,resizable=1");
		helpwindow.focus();
	}
	
	function absolutePath1(arg, startChar) {
		var rp = arg;
		while (rp.indexOf('\\', 0) != -1) { rp = rp.replace('\\', '/'); }
		var absPath = rp.substring(startChar, rp.lastIndexOf('/')); 
		return absPath;
	}
	
	
	function query() {
		browseMode = broInventory;		
		var paramStr = "?cat=" + document.MyForm.selectCategory.selectedIndex +
			"&plat=" + document.MyForm.selectPlatform.selectedIndex +
			"&lang=" + document.MyForm.selectLanguage.selectedIndex +
			"&mode=" + browseMode +
			"&page=1";
		reloadPage(paramStr);
	}

	
	function menu_query(category, platform, broMode) {
		browseMode = broMode;
		curShowcaseFile = getShowcaseFilename(document.MyForm2.selectLanguage2.selectedIndex, category, platform);
		var paramStr = "?cat=" + category +
			"&plat=" + platform +
			"&lang=" + document.MyForm2.selectLanguage2.selectedIndex +
			"&mode=" + broMode +
			"&page=1";
		reloadPage(paramStr);	
	}

	
	function changeSortOrder(order, keyfield) {
		browseMode = broInventory;
		
		var paramStr = "?" + getFiltersParamStr() + 
			"&mode=" + broInventory +
			"&order=" + order +
			"&field=" + keyfield +
			"&page=1";

		
		reloadPage(paramStr);
	}

	
	function switchMode(mode) {
		browseMode = mode;
		curShowcaseFile = getShowcaseFilename(curLanguage, curCategory, curPlatform);					
		
		var paramStr = "?cat=" + curCategory +
			"&plat=" + curPlatform +
			"&lang=" + curLanguage +
			"&mode=" + mode +
			"&order=" + sortOrder +
			"&field=" + sortField + 
			"&page=1";
		reloadPage(paramStr);
	}

	function back() {
		history.go(-1);
	}
	
	function getFiltersParamStr()
	{
		var str = "";
		for(var i = 0; i < oFilters.length; i++) {
			if( i > 0 ) str +="&"
			str += oFilters[i].paramName + "=" + curFilters[i];
		}
		return str;
	}
	
	function showPage(page) {
		browseMode = broInventory;
		
		
		var paramStr = "?" + getFiltersParamStr() + 
			"&mode=" + broInventory +
			"&order=" + sortOrder +
			"&field=" + sortField +
			"&page=" + page;

			
		reloadPage(paramStr);
	}

	
	function showImagePage(page) {
		
		var paramStr = "?id=" + curProductId + 
			"&page=" + page;
		document.location = baseDir + "slideshow.html" + paramStr;
	}
	
	function reloadPage(paramStr) {
		var queryFile = "inventory.html";
		if (browseMode == broShowcase) {
			
			queryFile = curShowcaseFile;
		}	
		document.location = baseDir + queryFile + paramStr;
	}
	
	
	function matchesFilter(filterType, arg) {
		var curFilter = -1;
		var result = false;
		if ((filterType == "category") && (document.MyForm.selectCategory[curCategory].text == arg)) result = true;
		if ((filterType == "language") && (document.MyForm.selectLanguage[curLanguage].text == arg)) result = true;
		if ((filterType == "platform") && (document.MyForm.selectPlatform[curPlatform].text == arg)) result = true;
		
		return result;
	}
	
	
	function getParamByName(params, arg) {
		var value = "undefined";
		for (var i=0; i < params.length; i++) {
			if (params[i].name == arg) {
				value = params[i].value
				break;
			}	
		}
		return value;
	}

	
	function getParamByNumber(params, arg) {
		var value = "undefined";
		if (arg < params.length) value = params[arg].value;
		return value;
	}

	
	var curCategory = 0;
	var curPlatform = 0;
	var curLanguage = 0;
	var sortOrder = ordAscending; 
	var sortField = 1; 
	var curItemsPage = 1; 
	var curImagePage = 1; 
	var curProductId = 0; 
	var itemsPerPage = 10; 
	var sortMode = modASCII;
	var browseMode = broShowcase; 
	var curShowcaseFile;
	
	
	function init() {
		
		var vSearch = unescape(self.location.search);	
		if (vSearch != "") {
			
			parseParams(params, vSearch);
			
			curCategory = getParamByName(params, "cat");  
			curPlatform = getParamByName(params, "plat"); 
			curLanguage = getParamByName(params, "lang"); 
			sortOrder = parseInt(getParamByName(params, "order"));
			sortField = parseInt(getParamByName(params, "field"));
			browseMode = parseInt(getParamByName(params, "mode"));
			if (isNaN(curCategory)) curCategory = 0;
			if (isNaN(curLanguage)) curLanguage = 0;
			if (isNaN(curPlatform)) curPlatform = 0;
			if (isNaN(sortOrder)) sortOrder = ordAscending;
			if (isNaN(sortField)) sortField = 1;
			if (isNaN(browseMode)) browseMode = broShowcase;
			if (browseMode == broInventory) {
				curItemsPage = parseInt(getParamByName(params, "page"));
				if (isNaN(curItemsPage)) curItemsPage = 1;
			}
			
			initCurFilters();
		}	
		
		objProduct = oPrNdx;
		initSortedList();

		objShowcase = oShow;	
		
	}	


	
	function o(arg) {
		var str = "";
		for (var i=0; i < o.arguments.length; i++) { 
			str = o.arguments[i];
			document.write(str + '\n');
		}	
	}

	
	var imageDir = "images";
	var keywords2 = "";
	
	var imagePrefix = imageDir + "/" + keywords2;

	





	
	function outCategoryList() {
		var id, dummyStr; 
		for (var i = 0; i < catCategory.length; i++) { 
			id = catCategory[i]; 
			
			
			
			dummyStr = categoryNames[id];
			if (matchesFilter("category", dummyStr)) { 
				dummyStr = '<span class="redtext">' + dummyStr + '</span>';
			} 
			else {
				if (productExists(curLanguage, id, 0)) {
					
					dummyStr = '<a href="javascript:menu_query(' + id + ', 0, 2)">' + dummyStr + '</a>';
				}
				else {
					dummyStr = '<span class="graytext">' + dummyStr + '</span>';
				}	
			}	
			o(dummyStr);
			
			if (i < catCategory.length - 1) o('&#160;|&#160; ');
		}
	}

	
	function outPlatformList() {
		var id, dummyStr; 
		for (var i = 0; i < catPlatform.length; i++) { 
			var id = catPlatform[i]; 
			
			
			
			dummyStr = platformNames[id];
			if (matchesFilter("platform", dummyStr)) { 
				dummyStr = '<span class="redtext">' + dummyStr + '</span>';
			}	
			else {
				if (productExists(curLanguage, curCategory, id)) {
					
					dummyStr = '<a href="javascript:menu_query(' + curCategory + ', ' + id + ', 1)">' + dummyStr + '</a>';
				}
				else {
					dummyStr = '<span class="graytext">' + dummyStr + '</span>';
				}	
			}	
			o(dummyStr);
			
			if (i < catPlatform.length - 1) o('&#160;|&#160; ');
		}
	}

	function outSearchInfo() {
		var startItem = itemsPerPage * (curItemsPage - 1);
		var firstStr = eval(startItem + 1) + ' - ' + eval(Math.min(startItem + itemsPerPage, foundProducts.length)) + ' of ';
		if (foundProducts.length == 0) firstStr = "Sorry, your search returned ";
		o('<p class="results">' + firstStr + foundProducts.length + ' item(s)</p>');
	}

	function outImageInfo() {
		o('<p class="results">Displaying image ' + curImagePage + ' of ' + objProduct[curProductId].slide_image.length + '</p>');
	}
	
	
	function lowBound(arg1, arg2) {
		var value = Math.round(arg1/arg2);
		if ((arg1 % arg2) >= arg2/2) value--;
		return value;
	}

	
	function highBound(arg1, arg2) {
		var value = Math.round(arg1/arg2);
		var remainder = arg1 % arg2;
		if ((remainder > 0) && (remainder < arg2/2)) value++;
		return value;
	}
	

	function outImagePageBar() {
		
		var totalPages = objProduct[curProductId].slide_image.length;
		var pageNumber = 0;
		o('<p class="results">Image ' + curImagePage + ' of ' + totalPages + ' : ');
		
		if (curImagePage > 10) {
			
			o('<a href="javascript:showImagePage(' + eval(lowBound(curImagePage, 10)*10 - 10 + 1) + ')">[Prev 10]</a>');
		}
		
		if (curImagePage > 1) {
			o('<a href="javascript:showImagePage(' + eval(curImagePage-1) + ')">[Prev]</a>');
		}
		var startPage = lowBound(curImagePage, 10)*10;
		var endPage = Math.min(highBound(curImagePage, 10)*10, totalPages);
		
		for (var i = startPage; i < endPage; i++) { 
			pageNumber = i+1;
			if (pageNumber != curImagePage) {
				o('<a href="javascript:showImagePage(' + pageNumber + ')">[' + pageNumber + ']</a> '); 
			}
			else { 
				o(' ' + pageNumber + ' ');
			}	
		}	
		
		if ((totalPages > 1) && (curImagePage < totalPages)) {
			o('<a href="javascript:showImagePage(' + eval(curImagePage+1) + ')">[Next]</a>');
		}
		
		if (curImagePage + 10 < totalPages) {
			
			o('<a href="javascript:showImagePage(' + eval(Math.min(highBound(curImagePage, 10)*10 + 1, totalPages)) + ')">[Next 10]</a>');
		}
		o('</p>');
	}	

	
	
	
	function productExists(language, category, platform) {
		var isValidLang 	= false;
		var isValidCategory = false;
		var isValidPlatform = false;
		var result 			= false;
		for(i=0; i < sortedProducts.length; i++) {
			productId = sortedProducts[i];
				if (language == 0 || findInArray(language, objProduct[productId].language)) {
					isValidLang = true;
				}
				if (category == 0 || findInArray(category, objProduct[productId].category)) {
					isValidCategory = true;
				}

				if (platform == 0 || findInArray(platform, objProduct[productId].platform)) {
					isValidPlatform = true;
				}
			if (isValidLang && isValidCategory && isValidPlatform) {
				
				result = true;
				break;
			}
		}
		return result;
	}
	

	function getShowcaseByFilter(language, category, platform) {
		var showcaseId = -1;
		for(var i=0; i < objShowcase.length; i++) {
			if ((objShowcase[i].language == language) && 
				(objShowcase[i].category == category) && 
				(objShowcase[i].platform == platform)) {
				showcaseId = i;
				break;
			}
		}	
		return showcaseId;
	}
	
	
	function getCurrentShowcase() {



		var showcaseId = -1; 
		if (showcaseId == -1) showcaseId = getShowcaseByFilter(curLanguage, curCategory, curPlatform);
		if (showcaseId == -1) showcaseId = getShowcaseByFilter(curLanguage, curCategory, 0);
		if (showcaseId == -1) showcaseId = getShowcaseByFilter(curLanguage, 0, 0);
		if (showcaseId == -1) showcaseId = getShowcaseByFilter(0, 0, 0);
		return showcaseId;
	}
	

	function outBuyLinkEx(prefix) {
		o('<a href="' + getBuyLinkEx(prefix) + '">');
	}
	
	function outBuyLinkEnd() {
		o('</a>');
	}
	
	
function initSortedList() 
	{
		for (var i = 0; i < objProduct.length; i++) {
			sortedProducts[i] = i;
		}	
	}
	
	
	function getPosByArg(menuarray, arg) {
		result = -1;
		for (var i = 0; i < menuarray.length; i++) {
			if (menuarray[i] == arg) {
				result = i + 1;
				break;
			}
		}
		return result;
	}

	

	
	
	function replaceStr(str, arg1, arg2) {
		var pos = str.indexOf(arg1);
		while (pos > -1) {
			str = str.substring(0, pos) + arg2 + str.substr(pos+arg1.length);
			pos = str.indexOf(arg1);
		}
		return str;
	}

	
	
	function paramsAllowed(str) {
		var result = false;
		if (str.indexOf("www.aitsafe.com") != -1) result = true;
		return result;
	}
	

function openExtLink (exturl) {
		openExtLinkEx(exturl, 650, 450);
	}
	
	
	
function openExtLinkEx (exturl, width, height) {
		var extwindow = window.open(exturl,"","toolbar=1,scrollbars=1,statusbar=no,width="+width+",height="+height+",resizable=1");
		extwindow.focus();
	}
	
function findInArray(element, array)
{
	var res = false;
	for( var i = 0; i < array.length; i++) {
		if( array[i] == element ) {
			res = true;
			break;
		}
	}
	return res;
}

function search_query(obj, paramName)
{
		browseMode = broInventory;		
		var paramStr = "?" + paramName + "=" + obj.selectedIndex + "&mode=" + browseMode + "&page=1";
		reloadPage(paramStr);
}

function search_keyword(name)
{
	browseMode = broInventory;		       
	 var index = -1; 
	for(var i=0; i<keywordNames.length; i++){
		if(name == keywordNames[i] ) {
			index = i;
			break;
		}
	}

	if(index >=0) {
		var paramStr = "?key" + "=" + index + "&mode=" + broInventory + "&page=1";
		reloadPage(paramStr);
	}
}
	
function filter(name, paramName, dic)
{
	this.name 		= name;
	this.paramName 	= paramName;
	this.dic 		= dic;
}

function initCurFilters()
{
	for(var i = 0; i < oFilters.length; i++) {
		curFilters[i] = parseInt(getParamByName(params, oFilters[i].paramName)); 
		if (isNaN(curFilters[i])) curFilters[i] = 0;
	}
}	
