/*
Developed by S3 Group Pty Ltd
Suite 328, Level 3, 368 Sussex Street
Sydney, NSW 2000
www.s3group.com.au

Copyright 2006
Last Modified: 23rd June 2006
*/

// ------------------------------------------------------------
// general functions - based on Apple Developer documentation *
// ------------------------------------------------------------
function getImage(name) {
  if (document.layers) {
    return findImage(name, document);
  }
  return null;
}

function findImage(name, doc) {
  var i, img;
  for (i = 0; i < doc.images.length; i++)
    if (doc.images[i].name == name)
      return doc.images[i];
  for (i = 0; i < doc.layers.length; i++)
    if ((img = findImage(name, doc.layers[i].document)) != null) {
      img.container = doc.layers[i];
      return img;
    }
  return null;
}

function getImagePageLeft(img) {
  var x, obj;
  if (document.layers) {
    if (img.container != null)
      return img.container.pageX + img.x;
    else
      return img.x;
  }
  return -1;
}

function getImagePageTop(img) {
  var y, obj;
  if (document.layers) {
    if (img.container != null)
      return img.container.pageY + img.y;
    else
      return img.y;
  }
  return -1;
}

function getStyleObject(objectId) {
    // cross-browser function to get an object's style object given its id
    if(document.getElementById && document.getElementById(objectId)) {
	// W3C DOM
	return document.getElementById(objectId).style;
    } else if (document.all && document.all(objectId)) {
	// MSIE 4 DOM
	return document.all(objectId).style;
    } else if (document.layers && document.layers[objectId]) {
	// NN 4 DOM.. note: this won't find nested layers
	return document.layers[objectId];
    } else {
	return false;
    }
} // getStyleObject

function changeObjectVisibility(objectId, newVisibility) {
    // get a reference to the cross-browser style object and make sure the object exists
    var styleObject = getStyleObject(objectId);
    if(styleObject) {
	styleObject.visibility = newVisibility;
	return true;
    } else {
	//we couldn't find the object, so we can't change its visibility
	return false;
    }
} // changeObjectVisibility

function moveObject(objectId, newXCoordinate, newYCoordinate) {
    // get a reference to the cross-browser style object and make sure the object exists
    var styleObject = getStyleObject(objectId);
    if(styleObject) {
	styleObject.left = newXCoordinate;
	styleObject.top = newYCoordinate;
	return true;
    } else {
	// we couldn't find the object, so we can't very well move it
	return false;
    }
} // moveObject

function openWin(winName, winSrc, winWidth, winHeight, scroll, menubar, toolbar)
{
	if (!scroll) { 
		scroll = "no"
	}
	
	var winLeft = (screen.width-winWidth)/2;
	var winTop = (screen.height-winHeight)/2;
	
	wname=window.open(winSrc, winName, "menubar="+menubar+",toolbar="+toolbar+",resizable=yes,scrollbars="+scroll+",width="+winWidth+",height="+winHeight+",top="+winTop+",left="+winLeft);
	
	wname.focus();
}

function closeWindow() {
	window.close();	
}

function submitForm(formName) {
	document.forms[formName].submit();	
}

function toggleVisibility( targetID )
{
	if (document.getElementById(targetID).style.display == "none")
	{
		document.getElementById(targetID).style.display = "block";
	}
	else
	{
		document.getElementById(targetID).style.display = "none";
	}
}

function setVisible( targetID, visible )
{
	if (visible) {
		document.getElementById(targetID).style.display = "block";
	} else {
		document.getElementById(targetID).style.display = "none";
	}
}

function toggleEnabled( formName, enabled ) {
	var a = toggleEnabled.arguments;
	for (i=2; i<a.length; i++) {
		if (!enabled) {
			document.forms[formName][a[i]].value = "";
		}
		document.forms[formName][a[i]].disabled = !enabled;
	}
}

function toggleEnabledCheckbox( formName, enabled ) {
	var a = toggleEnabledCheckbox.arguments;
	for (i=2; i<a.length; i++) {
		if (!enabled) {
			document.forms[formName][a[i]].checked = false;
		}
		document.forms[formName][a[i]].disabled = !enabled;
	}
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
	var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
	if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function goBack() {
	window.history.go(-1);
}

function refreshPage() {
	window.location.reload();	
}

function redirect(url, replaceUrl) {
	if (replaceUrl == undefined) replaceUrl = false;
	if (replaceUrl) {
		location.replace(url);
	} else {
		location.href = url;	
	}
}

function $(id) {
	return document.getElementById(id);	
}

// -----------------------------
// AJAX Functions *
// -----------------------------
function setDivValue(divName, value) {
	$(divName).innerHTML = value;	
}

function setInputValue(inputName, value) {
	$(inputName).value = value;	
}

function selectAllOptions(selectID) {
	var select = $(selectID);
	var i;
	for (i = select.length - 1; i>=0; i--) {
		select.options[i].selected = true;
	}
}

function deselectAllOptions(selectID) {
	var select = $(selectID);
	var i;
	for (i = select.length - 1; i>=0; i--) {
		select.options[i].selected = false;
	}
}

function addOption(selectID, optionText, optionValue, checkExist) {
	var select = $(selectID);
	var newOption = new Option(optionText, optionValue);
	var exist = false;
	var i;
	
	if (checkExist) {
		for (i = select.length - 1; i>=0; i--) {
			if (select.options[i].value == optionValue) {
				exist = true;
				break;
			}
		}
	}
	
	if (!exist) {
		try {
			select.add(newOption, null); // standards compliant; doesn't work in IE
		}
		catch(ex) {
			select.add(newOption); // IE only
		}
	
		select.selectedIndex = (select.length-1);
	}
}

function addOptionBefore(selectID, optionText, optionValue)
{
	var select = $(selectID);
	if (select.selectedIndex >= 0) {
		var newOption = new Option(optionText, optionValue);
		var oldOption = select.options[select.selectedIndex];  
		try {
		  select.add(newOption, oldOption); // standards compliant; doesn't work in IE
		}
		catch(ex) {
		  select.add(newOption, select.selectedIndex); // IE only
		}

		select.selectedIndex = (select.selectedIndex-1); // IE doesn't work
	}
}

function removeSelectedOptions(selectID)
{
	var select = $(selectID);
	var i;
	for (i = select.length - 1; i>=0; i--) {
		if (select.options[i].selected) {
			select.remove(i);
			if (!select.multiple) {
				select.selectedIndex = 0;
				break;
			}
		}
	}
}

function removeOptionLast(selectID)
{
	var select = $(selectID);
	if (select.length > 0) select.remove(select.length - 1);
}

function removeOptionByName(selectID, optionText) {
	var select = $(selectID);
	var i;
	for (i = select.length - 1; i>=0; i--) {
		if (select.options[i].text == optionText) select.options[i] = null;
	}
}

function removeOptionByValue(selectID, optionValue) {
	var select = $(selectID);
	var i;
	for (i = select.length - 1; i>=0; i--) {
		if (select.options[i].value == optionValue) select.options[i] = null;
	}
}

function selectOption(selectID, optionValue) {
	var select = $(selectID);
	var i;
	for (i = select.length - 1; i>=0; i--) {
		if (select.options[i].value == optionValue) {
			select.selectedIndex = i;
			break;
		}
	}
}

function renameSelectOption(selectID, optionName, optionValue) {
	var select = $(selectID);
	var i;
	for (i = select.length - 1; i>=0; i--) {
		if (select.options[i].value == optionValue) {
			select.options[i].text = optionName;
			break;
		}
	}
}

function clearOptions(selectID) {
	var select = $(selectID);
	var i;
	for (i = select.length - 1; i>=0; i--) {
		select.options[i] = null;
	}
}

function clearField(inputID) {
	$(inputID).value = "";	
}

function confirmRedirect(msg, url) {
	if (confirm(msg)) {
		redirect(url);
	}
}

function setFormProperties(formName, action, target) {
	var form = document.forms[formName];
	form.action = action;
	form.target = target;
}

// -----------------------------
// WebPulse specific functions *
// -----------------------------

function checkAll( formName, selfName, elementName)
{
	var i;
	var self = document.forms[formName][selfName];
	var elements = document.forms[formName][elementName];
	//alert(elements);
	if (elements != null) {
		if (self.checked) {
			self.checked = true;
			if (elements.length > 1) {
				for (i=0; i<elements.length; i++) {
					elements[i].checked = true;
				}
			} else {
				elements.checked = true;
			}
		} else {
			self.checked = false;
			if (elements.length > 1) {
				for (i=0; i<elements.length; i++) {
					elements[i].checked = false;
				}
			} else {
				elements.checked = false;
			}
		}
	}
}

function checkAllTicked(formName, selfName, checkAllName) {
	var checkbox = document.forms[formName][selfName];
	var checkAll = document.forms[formName][checkAllName];
	var len = checkbox.length;
	var all_checked = true;

	if (len > 1) {
		for (i=0;i<len;i++) {
			if (!checkbox[i].checked) {
				all_checked = false;
			}
		}
	} else {
		if (!checkbox.checked) {
			all_checked = false;
		}
	}

	if (all_checked) {
		checkAll.checked = true;
	} else {
		checkAll.checked = false;
	}
}

// Function to update the selected categories after selecting checkboxes
function showSelectedItems(divToReplace, hiddenField, selectedIds, localPath) {
	var category_id = document.getElementById(hiddenField);

	var div = document.getElementById(divToReplace);
	if (div != undefined) {
		div.innerHTML = "<h6>Selected Category(s):</h6>";

		var a = showSelectedItems.arguments;
		for (i=4; i<a.length; i++) { // first 4 arguments are not the category names
			div.innerHTML += '<img src="' + localPath + 'images/icons/list.gif" alt="&gt;" />&nbsp;&nbsp;&nbsp;' + a[i] + '<br />';
		}
		
		div.innerHTML += '<br />';
	}
	
	category_id.value = selectedIds;
}

// Javascript function to interact with Flash category selector component
// Sets the value of a hidden category_id field from the Flash selected category
function getCategoryId(targetID, id) { 
	var targetField = document.getElementById(targetID);
	if (targetField != null) {
		targetField.value = id;
	}
}

/* load the delivery details from billing details */
function fillDeliveryDetails(list, frm){
	var value = list.options[list.selectedIndex].value;
	var form = document[frm];
	if (value == "no") {
		form.delivery_fullname.value = "";
		form.delivery_address.value = "";
		form.delivery_suburb.value = "";
		form.delivery_state.value = "";
		form.delivery_postcode.value = "";
		form.delivery_phone.value = "";
	}
	else{
		form.delivery_fullname.value = form.billing_fullname.value;
		form.delivery_address.value = form.billing_address.value;
		form.delivery_suburb.value = form.billing_suburb.value;
		form.delivery_state.value = form.billing_state.value;
		form.delivery_postcode.value = form.billing_postcode.value;
		form.delivery_phone.value = form.billing_phone.value;
	}
}
