function mail_contact(mailID)
{
	var mailCode = "";
	switch ( mailID )
	{
		case 'sales' :
			mailCode = "115,97,108,101,115,64,99,108,111,99,107,119,111,114,107,";
			mailCode += "99,111,109,112,111,110,101,110,116,115,46,99,111,109";
			break;
		case 'polish' :
			mailCode = "98,105,117,114,111,64,99,108,111,99,107,119,111,114,107,";
			mailCode += "112,111,108,115,107,97,46,112,108";
			break;
	}
	return mailCode;
}

// Function: to re-render PNG image with alpha transparency in IE6 Win.
function fixPNG( myImage )
{     
	var imgID = (myImage.id) ? "id='" + myImage.id + "' " : "";
	var imgClass = (myImage.className) ? "class='" + myImage.className + "' " : "";
	var imgTitle = (myImage.title) ? "title='" + myImage.title + "' " : "title='" + myImage.alt + "' ";
	var imgStyle = "display:inline-block;" + myImage.style.cssText;
	var strNewHTML = "<div " + imgID + imgClass + imgTitle;
	strNewHTML += " style=\"" + "width:" + myImage.width + "px; height:" + myImage.height + "px;" + imgStyle + ";";
	strNewHTML += "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
	strNewHTML += "(src=\'" + myImage.src + "\', sizingMethod='scale');\"></div>";
	myImage.outerHTML = strNewHTML;	
};


//--[COOKIES ]-------------------------------------------------------------------------|

function create_cookie( name, value, days)
{
	if (days)
	{
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	} else {
		var expires = "";
	}
	document.cookie = name+"="+value+expires+"; path=/";
	//document.cookie = ck;
}

function read_cookie(name)
{
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++)
	{
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function erase_cookie(name)
{
	create_cookie(name,"",-1);
}

//--[BUTTON CONTROL: enable / disable button on command. ]-----------------------------|
function set_button_state( formID, buttonID, buttonIndex, buttonState )
{
	var pageForm = document.forms[formID];
	var buttonChecked = pageForm.elements[buttonID][buttonIndex].checked;

	if (buttonChecked && buttonState != 0)
	{
		pageForm.elements[buttonID][buttonIndex].checked = false;
		pageForm.elements[buttonID][buttonIndex - 1].checked = true;
	}
	
	pageForm.elements[buttonID][buttonIndex].disabled = buttonState;

}

//--[OPEN: new window with passed item. ]----------------------------------------------|
function new_window( htmlSource, content, width, height )
{
	if (!width) width = 500;
	if (!height) height = 500;

	var addQ = (content) ? "?content=" + content : "";
	window.open(htmlSource + addQ, "", "menubar=yes, status=yes, scrollbars=yes, toolbar=yes, resizable=yes, width=" + width + ", height=" + height);
}


//--[CLOSE: window called from hyperlink. ]--------------------------------------------|
function close_window() {
	window.close();
}	//end function closeWindow()

//--[STRING: trim white space from either end of a string.]---------------------|
function strtrim()
{
	return this.replace(/^\s+/,'').replace(/\s+$/,'');
}

String.prototype.trim = strtrim;

//--[STRING: check for correct format.]---------------------|
function checkTextInput(mode)
{
	var result = false;
	if (this.trim() != '')
	{
		switch (mode)
		{
			case 1:
				var regex = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/
				result = regex.test(this);
				break;
			default:
				break;
		}
	}
	return result;
}

String.prototype.checkInput = checkTextInput;

//--[SETUP: scan and amend document <a> tag link targets.]----------------------|
function externalLinks()
{ 
	if (!document.getElementsByTagName) return; 
	var anchors = document.getElementsByTagName("a"); 
	for (var i=0; i<anchors.length; i++)
	{ 
		var anchor = anchors[i]; 
		if (anchor.getAttribute("href") && anchor.getAttribute("rel") == "external")
		{
			anchor.target = "_blank"; 
		}
	}
}

//--[DISPLAY: by style element control. ]--------------------------------------|
function set_display( elementID, displayState )
{
	// set CSS display value.
	var displayType = (displayState == 1) ? "block" : "none";
	// Set the page element display mode value.
	document.getElementById(elementID).style.display = displayType;
	// Set cookie conditions.
	if (displayState) 
	{
		create_cookie(elementID,"1",1);
	} else {
		erase_cookie(elementID);
	}
	
	if (elementID == "link_creator")
	{
		var pageForm = document.forms['component_list'];
		if (document.all)
		{
			var capturedText = document.selection.createRange().text;
		} else {
			var capturedText = window.getSelection();
		}
		pageForm.elements['link_creator_text'].value = capturedText;
	}
}

function check4_display(elementID)
{
	var displayStatus = read_cookie(elementID);
	set_display(elementID, displayStatus);
}

//--[CREATE: XHTML code for a text hyperlink.]---------------------------------|
function create_link_code( formID, codeField, promptID )
{
	// Set document object ID for link creator form.
	var pageForm = document.forms[formID];
	
	// First clear HTML code box.
	pageForm.elements[codeField].value = "";
	
	// Read in values for link text, link url and link title.
	var linkText = pageForm.elements['link_creator_text'].value.trim();
	var linkURL = pageForm.elements['link_creator_url'].value.trim();
	var linkTitle = pageForm.elements['link_creator_hover'].value.trim();
	
	var linkReady = linkText != "";
	var urlReady = linkURL != "" && linkURL != "http://";
	var titleReady = linkTitle != "" && linkTitle != "To:";
	var formReady = linkReady && urlReady && titleReady;
	
	if (formReady)
	{
		// Set string value for link window option.
		if (pageForm.elements['link_creator_win'][1].checked)
		{
			var linkWindow = "rel='external'";
		} else {
			linkWindow = "";
		}

		// Compile XHTML code for link.
		var linkCode = "<a href='" + linkURL + "' title='" + linkTitle + "' " + linkWindow + ">" + linkText + "</a>";

		// Write new link code back to link creator form.
		pageForm.elements[codeField].value = linkCode;
		
		// Setup user message.
		var userMessage = "The hyperlink code has been created in the blue box below.  Just 'Copy &amp; Paste' the complete code into your paragraph copy.";
		
		// Highlight the new code.
		pageForm.elements[codeField].select();
		
	} else {
		var userMessage = "All options must be set before a link can be created.";
	}
	
		// Notify user.
		document.getElementById(promptID).innerHTML = userMessage;
}


function urlEncode(str){
    str=escape(str);
    str=str.replace(new RegExp('\+','g'),'%2B');
    return str.replace(new RegExp('%20','g'),'+');
}

//--[CONTROL: for uploading files. ]---------------------------------------------------|
function upload_control( formID, fieldName, promptID, pageState, nextPage )
{
	var pageForm = document.forms[formID];
	var userResponse, dbMode;
	
	if (fieldName) var fileName = pageForm.elements[fieldName].value;

	if (!nextPage)
	{
		switch (pageState)
		{
			case 11:
				userResponse = window.confirm("Save changes to the product categories database?");
				dbMode = 8;
				break;
			case 10:
				userResponse = window.confirm("Are you sure you want to delete the selected email subscribers from the database?");
				dbMode = 5;
				break;
			case 9:
				userResponse = window.prompt("Are you sure you want to add a new email subscriber to the database?\nEnter how many new subscribers to add.", 1);
				dbMode = 2;
				break;
			case 8:
				userResponse = window.confirm("Are you sure you want to delete the selected items from the product categories database?");
				dbMode = 5;
				break;
			case 7:
				userResponse = window.confirm("Are you sure you want to delete the selected email messages from the database?");
				dbMode = 5;
				break;
			case 6:
				userResponse = window.confirm("Are you sure you want to add a new email message to the database?");
				dbMode = 2;
				break;
			case 5:
				userResponse = window.confirm("Are you sure you want to add a new category item to the database?");
				dbMode = 2;
				break;
			case 4:
				userResponse = window.confirm("Are you sure you want to remove this item from the database?");
				break;
			case 3:
				userResponse = window.confirm("Are you sure you want to add a new item to the database?");
				break;
			case 1:
				userResponse = window.confirm("Save changes to this database item?");
				break;
		}
	}
	
	if (fileName != "" && fieldName != "" && pageState == 1 && userResponse)
	{
		document.getElementById(promptID).innerHTML = "<p>Uploading new media. Please wait...</p>";
	};
	
	if (pageState < 5) pageForm.elements['pageState'].value = pageState; // set component form page state value.
	
	if (nextPage)
	{
		var newPage = pageForm.elements['page'].value;
		switch (nextPage)
		{
			case 1 : newPage++;
				break;
			case -1 : newPage--;
				break;
		}
		pageForm.elements['page'].value = newPage;
		pageForm.elements['pageState'].value = 0;
	}

	if (pageState > 4 && userResponse)
	{
		pageForm.elements['mode'].value = dbMode;
		if (pageState == 9) pageForm.elements['numToAdd'].value = userResponse;
		pageForm.submit(); // submit component form.
	}

	if (userResponse || nextPage || pageState == 2)
	{
		pageForm.submit(); // submit component form.
	}
	//alert(userResponse + "|"+ nextPage + "|" + pageState);
}

//--[TIMEOUT: control for CMS. ]-------------------------------------------------------|
function set_timeout()
{
	reset_action_time();
	loginForm = document.forms['db_login_logout'];
	check_timeout(loginForm);
}

//--[GLOBAL: not used.] 
var timeoutFlag = false;

//--[CHECK: inactivity timeout for website CMS.]---------------------------------------|
function check_timeout( loginForm )
{
	if (loginForm)
	{
		var currentTime = new Date().getTime(); // read current system time.
		var startTime = loginForm.elements['actionTime'].value; // get last activitiy time from CMS status form.
		 // if elapsed time since last activity is greater than timeout period.
		if (Math.round((currentTime - startTime ) / 1000) > (60 * 60)) // currently set to 60 minutes.
		{
			//var pageURL = window.location;
			//window.location = pageURL + "?timeout=true&save=true";
			componentForm = document.forms['component_list']; // set ID for component list form.
			loginForm = document.forms['db_login_logout']; // set ID for CMS status form.
			loginForm.elements['timeout'].value = 1; // set timeout flag.
			if (componentForm)
			{
				if (componentForm.elements['pageState']) // if currently in edit mode.
				{
					componentForm.elements['pageState'].value = 2; // force a save and return state.
					componentForm.submit();
				}
			}
			loginForm.submit(); // then submit CMS control form.
		} else {
			setTimeout("check_timeout(loginForm)", 60 * 1000); // Check every 1 minute.
		}
		//alert(document.forms['db_login_logout'].elements['actionMode'].value);
	}
}

//--[RESET: inactivity timeout for CMS, actioned from onload, mouse and key events.]---|
function reset_action_time() 
{
	var currentTime = new Date().getTime(); //  read system time.
	var loginForm = document.forms['db_login_logout']; // set CMS status form ID.
	if (loginForm) loginForm.elements['actionTime'].value = currentTime; // set activity start time value in CMS status form.
}

//--[SETUP: email address from passed index value. ]-----------------------------------|
function mail_setup( indexValue, subjectText ) {

	var mailCode ="109,97,105,108,116,111,58,"; // setup code for address.
	var mailSubj = "?subject=" + subjectText; // setup subject for address as string.
	var mailBody = "&body=";
	
	mailCode += mail_contact(indexValue); // get required email code.
	var mailSource = ""; // setup source variable as string.
	var decode = mailCode.split(","); // setup array from encoded address.
	for (var e = 0; e < decode.length; e++)
	{
		mailSource += String.fromCharCode(decode[e]); // decode address as string.
	}
	document.location = mailSource + mailSubj + mailBody; // Write email call.

} // end: mail_setup()

//--[ BACKUP/RESTORE CONTROLS ]-------------------------------------------------------------|
function input_check(formID, processType, tableName, fileName, promptID)
{
	var pageForm = document.forms[formID];
	var fileField = fileName;
	if (tableName) var tableName = pageForm.elements[tableName].value;
	var fileName = pageForm.elements[fileName].value.trim();
	var requiredText = "* Required *";
	var fileNameValid = (fileName != requiredText) && (fileName != "");
	if (fileNameValid)
	{
		switch (processType)
		{
			case "backup" :
				var userOk = window.confirm("You are about to download\ndatabase table data from: '" + tableName + "'\nto backup file: " + fileName + ".sql");
				break;
			case "restore" :
				var userOk = window.confirm("You are about to upload and restore \ndatabase table data referenced in file: '" + fileName + "\n\nNote: This will overwrite all existing table data.");
				break;
			case "copy" :
				var userOk = window.confirm("You are about to copy published data: '" + tableName + "'\nback into the editable data table: '" + fileName + "'\n\nThis will not overwrite existing table data.");
				break;
			case 'import' :
				var userOk = true;
				var nextButton = ($('next')) ? $('next') : null;
				if (nextButton) nextButton.disabled = true;
				break;
		}
		
		if (userOk)
		{
			switch (processType)
			{
				case "backup" :
					document.getElementById(promptID).innerHTML = "<p>Database backup file: " + fileName + ".sql has been created.</p>";
					break;
				case "import" :
					document.getElementById(promptID).innerHTML = "<p>Uploading file: " + fileName + "</p><p>Please wait...</p>";
					break;
				case "restore" :
					document.getElementById(promptID).innerHTML = "<p>Database restore file: " + fileName + " uploading...</p>";
					break;
				case "copy" :
					document.getElementById(promptID).innerHTML = "<p>Copying data from: '" + tableName + "' to table '" + fileName + "'.</p>";
					pageForm.elements['copyRequest'].value = 1;
					break;
			}
			
			pageForm.submit();
		}
	} else {
		switch (processType)
		{
			case "backup" :
				document.getElementById(promptID).innerHTML = "<p>Please enter a file name into which the backup data will be stored.</p>";
				pageForm.elements[fileField].value = requiredText;
				break;
			case "import" :
				document.getElementById(promptID).innerHTML = "<p>Please first choose an XML file to upload.</p>";
				break;
			case "restore" :
				document.getElementById(promptID).innerHTML = "<p>Please first choose a SQL file to upload and restore to the database.</p>";
				break;
		}
	}
}

//--[ROLLOVER IMAGES CONTROL: ]-----------------------------------------------------------------|
function set_detail(imageFile, mode, details)
{
	prodText = unescape(details);
	if (mode)
	{
		var normImage;
		if (document.all)
		{
			document.normImage = document.all["enlarged_img"].src;
			document.all["enlarged_img"].src = imageFile;
			//document.all.enlarged_img.src = imageFile;
		} else {
			var preview = document.getElementById('enlarged_img');
			document.normImage = preview.src; //document["enlarged_img"].src;
			//document["enlarged_img"].src = imageFile;
			preview.src = imageFile;
		};
		var normText
		if (document.getElementById("product_text_details"))
		{
			document.normText = document.getElementById("product_text_details").innerHTML;
			if (prodText != "")
			{
				document.getElementById("product_text_details").innerHTML = prodText;
			};
		}
	} else {
		if (document.all)
		{
			document.all["enlarged_img"].src = document.normImage;
		} else {
			var preview = document.getElementById('enlarged_img');
			preview.src = document.normImage;
			//document["enlarged_img"].src = document.normImage;
		};
		if (prodText != "")
		{
			document.getElementById("product_text_details").innerHTML = document.normText;
		};
	};
};

//--[FIX: for IE6 to correctly display 'navigation' elements when rolled over.]----------------|
var fixNavigation = function()
{
	if (document.all && document.getElementById)
	{
		navRoot = document.getElementById("navi_links");
		if (navRoot)
		{
			for (i=0; i<navRoot.childNodes.length; i++)
			{
				node = navRoot.childNodes[i];

				if (node.nodeName=="LI" || node.nodeName=="logo")
				{
					node.onmouseover=function()
					{
						this.className+=" over";
					}
					node.onmouseout=function()
  					{
  						this.className=this.className.replace(" over", "");
					}
	   		}
   		}
   		
   		navHome = document.getElementById("logo");
	   	navHome.onmouseover = function()
   		{
   			this.className+=" over";
   		}
			navHome.onmouseout = function()
  			{
  				this.className=this.className.replace(" over", "");
			}
		}
  	}
}

//--[RESET: Function to clear emailForm prompt area and form elements to defaults.]---------------|
function reset_form(formID, promptID)
{	
	document.forms[formID].reset(); // reset form.
	
	// and for forms that collect values from previously posted data.
	var userForm = document.forms[formID];
	var formLength = userForm.elements.length;
	for (var e = 0; e < formLength; e ++)
	{
		var inputType = userForm.elements[e].type;
		// clear data for any text input field.
		if (inputType == 'text' || inputType == 'textarea')
		{
			userForm.elements[e].value = '';
		}
	}
	
	document.getElementById(promptID).innerHTML = ""; // clear error message area.
}

//--[UPDATE: selected products displays and form values in email message edit.--------------------|
function updateSelectedProducts(formID, productCheckBox)
{
	var pageForm = document.forms[formID]; // setup document form ID.
	
	// setup update mode for selected product and grab ID.
	var updateMode = productCheckBox.checked;
	var productID = productCheckBox.value;
	
	// create array from current selected products.
	var currentProducts = pageForm.selectedProducts.value;
	var productsSelected = (currentProducts) ? pageForm.selectedProducts.value.split(',') : new Array();
	var productDisplayDiv = document.getElementById('products_selected');
	var spacer = document.createElement("div");
	spacer.setAttribute("class", "clear_right");
	
	// depending on mode...
	if (updateMode) // add product.
	{
		// add product ID to selected products array.
		productsSelected.push(productID);
		var selectedSize = 67;
		var imageData = document.getElementById(productID).childNodes[1];
		var productData = document.getElementById(productID).childNodes[2];
		var regex = /(.*)&scale=(\d*)&/
		var imageURL = regex.exec(imageData['src']);
		var newScale = Math.round((selectedSize / 32) * imageURL[2]);
		regex = /(.*)&crop=(\d*)/
		imageURL = regex.exec(imageData['src']);
		var crop = imageURL[2];
		var newProduct = document.createElement("div");
		newProduct.setAttribute("id", "display_" + productID);
		productHTML = "<div class='img_border'><img src='" + imageURL[1] + "&amp;scale=" + newScale + "&amp;size=" + selectedSize + "&amp;back=true&amp;crop=" + crop + "' alt='" + imageData['alt'] + "' /></div>";
		productHTML += "<span class='product_data'>" + productData.innerHTML + "</span>";
		newProduct.innerHTML = productHTML;
		productDisplayDiv.appendChild(newProduct);
		//if (!(productsSelected.length % 2)) newProduct.appendChild(spacer);
				
	} else { // remove product.
		// get index of product ID.
		var arrayPos = productsSelected.findIndex(productID);
		// delete from array.
		productsSelected.splice(arrayPos, 1);
		
		// remove product from selected products display.
		var divID = "display_" + productID;
		var elementID = document.getElementById(divID);
		productDisplayDiv.removeChild(elementID);
	}

	// now update document form selected products value.
	pageForm.selectedProducts.value = productsSelected.join();
}

Array.prototype.findIndex = function(value)
{
	for (var i = 0; i < this.length; i ++)
	{
		if (this[i] == value)
		{
			return i;
		}
	}
	return 0;
}

function preview_email(messageID, formID)
{
	var pageForm = document.forms[formID]; // setup document form ID.
	var emailFormat = (pageForm.elements['emailFormat'][1].checked) ? 1: 0;
	previewURL = 'preview.php?id=' + messageID + '&ft=' + emailFormat;
	new_window(previewURL, '', 800, 600);
}

function send_email(messageID, formID)
{
	var pageForm = document.forms[formID]; // setup document form ID.
	var emailRecipient = (pageForm.elements['sendEmailTo'][1].checked) ? pageForm.elements['recipients'].value.trim(): 'Mailing List';
	if (emailRecipient == '')
	{
		alert('Please enter an email address in the \'To other:\' box,');
	} else {
	
		var emailSubject = pageForm.Email_Subject.value.trim();
		if (emailSubject == '* new message *' || emailSubject == '')
		{
			alert('Please enter an appropriate email subject before sending this email.');
		} else {
		
			var emailFormat = (pageForm.elements['emailFormat'][1].checked) ? 1: 0;
			var formatText = (emailFormat) ? 'Plain Text' : 'HTML';
			var message = "Please confirm that you wish to send this email message.\nTo: ";
		message = (emailRecipient != 'Mailing List') ? message+emailRecipient+"\nFormat: "+formatText : message+emailRecipient;
		
			var userResponse = window.confirm(message);

			if (userResponse)
			{	
				var sendURL = 'send.email.php?id=' + messageID + '&ft=' + emailFormat + '&rt=' + emailRecipient;
				pageForm.elements['pageState'].value = 1; // force a 'save' state.
				pageForm.submit();
				new_window(sendURL, '', 800, 600);
			}
		}
	}
}

function setDisabled(formID, formElement, status, promptSpace, message)
{
	var pageForm = document.forms[formID];
	pageForm.elements[formElement].disabled = !status;
	if (status)
	{
		pageForm.elements[formElement].focus();
		pageForm.elements[formElement].select();
		document.getElementById(promptSpace).innerHTML = message;
	} else {
		document.getElementById(promptSpace).innerHTML = '';
	}
}

//------------------------------------------------[ import: STEP control ]
function importStep(elementID)
{
	var step = ($('step')) ? $('step').value : null;
	var nextButton = ($('next')) ? $('next') : null;
	
	if (nextButton) nextButton.disabled = true;
	
	//alert(step);
	switch (elementID)
	{
		case 'previous' :		
			$('step').value = step - 1;
			$('back').value = 1;
			break;
		case 'cancel' :
			$('step').value = 0;
			break;
	}
	$('import_data').submit();

	return false;
}

