// IE 4 to 5.5 error when setting the cursor property
isIEshit = navigator.appVersion.indexOf("MSIE 4") >= 0 || navigator.appVersion.indexOf("MSIE 5") >= 0


// help funtions
function helpFeat(hfID) {
	return openWindow("/moreinfo/feature.asp?FID="+hfID, "feature_help", 400, 500, 1)
}

// check login info for all the login forms
function checkLogin(clform) {
	if (clform.username.value == "") {
		alert("Baka Wireless Login\n\nPlease Enter a Valid Username!")
		clform.username.focus()
		return false
	}
	else if (clform.password.value == "") {
		alert("Baka Wireless Login\n\nPlease Enter a Valid Password!")
		clform.password.focus()
		return false
	}
	else {
		return true
	}
}

// mouseover function
function imgSwap(img, n) {
	document.images[img].src = eval(img + n + ".src")
}

// table cell change colour
function cellBehave(cbObject,cbColour,cdCursor) {
	if (cbObject.style && !cbObject.disabled) {
		cbObject.style.backgroundColor = cbColour
		if (!isIEshit) {
			cbObject.style.cursor = cdCursor
		}
	}
}
function toggleStyle() {
	if (document.getElementsByName) {
		dsSheets = document.getElementsByTagName("link")
		for (i=0;i<dsSheets.length;i++) {
			dsSheets[i].disabled = (dsSheets[i].disabled) ? false : (dsSheets[i].rel == "stylesheet")
		}
	}
	return false
}


// any html element you want to link (like MSDN menu)
function divBehave(dbObject,dbBorder,dbColour,dbCursor) {
	if (dbObject.style && !dbObject.disabled) {
		dbObject.style.backgroundColor = dbColour
		if (!dbBorder || dbBorder == "") {
			dbObject.style.border = ""
			dbObject.style.padding = "3px"
		}
		else {
			dbObject.style.border = "1px solid "+dbBorder
			dbObject.style.padding = "2px"
		}
		if (!isIEshit) {
			dbObject.style.cursor = dbCursor
		}
	}
}


//--- table cell link -------------------------------------------
function cellClick(ccObject,ccEvent,ccURL) {
	
	ccShiftKey = false
	//shift key is depressed
	if (ccEvent.shiftKey) {
		ccShiftKey = true
	}
	
	// dont allow the event to be triggered multiple times
	if (ccEvent.preventBubble) {
		ccEvent.preventBubble()
	}
	else {
		ccEvent.cancelBubble = true
	}
	
	//do it now!
	if (ccShiftKey) {
		//if the shift key is depressed, open a new window and return false
		top.owWin = window.open(ccURL, "ccWin")
		return false
	}
	else {
		//not depressed, go to URL
		self.location = ccURL
		return true
	}
}
//---------------------------------------------------------------


//--- openWindow() ----------------------------------------------
function openWindow(owURL, owName, owWidth, owHeight, owScroll) {
	//trap for null or blank stuff
	if (!owURL || owURL == "") {
		owURL = "/"
	}
	if (!owName || owName == "") {
		owDate = new Date()
		owName = owDate.getDay() + "_" + owDate.getHours() + "_" + owDate.getMinutes() + "_" + owDate.getSeconds()
	}
	if (!owWidth || isNaN(owWidth)) {
		owWidth = 400
	}
	if (!owHeight || isNaN(owHeight)) {
		owHeight = 300
	}
	if (!owScroll || owScroll == "") {
		owScroll = 1
	}
	
	
	//calculate the center of the screen
	owX = parseInt((screen.availWidth/2)-(owWidth/2))
	owY = parseInt((screen.availHeight/2)-(owHeight/2))
	
	
	//build the parameters string
	owParms = ""
	owParms = owParms + "left=" + owX + ","
	owParms = owParms + "top=" + owY + ","
	owParms = owParms + "width=" + owWidth + ","
	owParms = owParms + "height=" + owHeight + ","
	owParms = owParms + "resizable=" + owScroll + ","
	owParms = owParms + "scrollbars=1,"
	owParms = owParms + "menubar=0,"
	owParms = owParms + "status=0"
	
	
	//get the reference of the window
	owWin = eval("top.owWin_"+owName)
	//if it exists
	if (owWin) {
		//if it "exists" but is closed
		if (owWin.closed) {
			eval("top.owWin_"+owName+" = window.open('"+owURL+"','"+owName+"','"+owParms+"')")
		}
		//still open
		else {
			owWin.location.href = owURL
			owWin.resizeTo(owWidth,owHeight)
			owWin.moveTo(owX,owY)
			owWin.focus()
		}
	}
	//doesnt exist... create it
	else {
		eval("top.owWin_"+owName+" = window.open('"+owURL+"','"+owName+"','"+owParms+"')")
	}
	
	
	//return false... always
	return false
}
// legacy
function openW(owURL, owWidth, owHeight, owScroll) {
	return openWindow(owURL, "oldOwWin", owWidth, owHeight, owScroll)
}
function openS(osURL, osWidth, osHeight) {
	return openWindow(osURL, "oldOwWin", osWidth, osHeight, 0)
}
function openF(ofURL, ofWidth, ofHeight) {
	return openWindow(ofURL, "oldOwWin", ofWidth, ofHeight, 1)
}
//---------------------------------------------------------------


//--- get the value of a checked/selected form element ----------
function getValue(gvObj) {
	gvValue = ""
	if (gvObj) {
		if (!gvObj.length) {
			if (gvObj.selected || gvObj.checked) {
				gvValue = gvObj.value
			}
		}
		else {
			for (gvLoop=0;gvLoop<gvObj.length;gvLoop++) {
				if (gvObj[gvLoop].selected || gvObj[gvLoop].checked) {
					gvValue = gvObj[gvLoop].value
					break
				}
			}
		}
	}
	return gvValue
}
//---------------------------------------------------------------


// writing DHTML to a page
function writeDHTML(layerID,wdContent) {
	if (document.getElementById) {
		x = document.getElementById(layerID)
		x.innerHTML = wdContent
	}
	else if (document.all) {
		x = document.all[layerID]
		x.innerHTML = wdContent
	}
}

// the tab next function for going to the next field
var phone_field_length = 0
function TabNext(obj,event,len,next_field) {
	if (event == "down") {
		phone_field_length=obj.value.length;
	}
	else if (event == "up") {
		if (obj.value.length != phone_field_length) {
			phone_field_length=obj.value.length;
			if (phone_field_length == len) {
				next_field.focus();
			}
		}
	}
}


//--- replacement code for TabNext() ----------------------------
// suObjCurrent		event triggering object
// suEvent		the event
// suArray		list of IDs for the collection of objects
//---------------------------------------------------------------
function singleUnit(suObjCurrent,suEvent,suArray) {
	if (suEvent.type.toUpperCase() == "KEYDOWN" || suEvent.type.toUpperCase() == "KEYUP") {
		if (suEvent.keyCode == 9 || suEvent.keyCode == 20 || suEvent.keyCode == 27 || suEvent.keyCode == 45 || suEvent.keyCode == 91 || suEvent.keyCode == 144 || suEvent.keyCode == 144) {
			// tab, capslock, escape, insert, windows, numlock, scroll-lock
		}
		else if (suEvent.keyCode >= 33 && suEvent.keyCode <= 40) {
			// page up/page down, home/end, and arrow keys
		}
		else if (suEvent.keyCode >= 16 && suEvent.keyCode <= 18) {
			// shift, control, alt
		}
		else if (suEvent.keyCode >= 112 && suEvent.keyCode <= 123) {
			// F1 to F12 keys
		}
		else {
			suTextSelect = ""
			if (suObjCurrent.setSelectionRange) {
				//firefox
				suTextSelect = suObjCurrent.value.substring(suObjCurrent.selectionStart,suObjCurrent.selectionEnd)
			}
			else if (suObjCurrent.createTextRange) {
				//ie
				suTextSelect = document.selection.createRange().text
				//track the cursor position within each form element
				suObjCurrent.cursorPosition = document.selection.createRange().duplicate()
			}
			if (suTextSelect.length == 0) {
				// current object properties
				suObjNext = suObjCurrent
				suObjPrevious = suObjCurrent
				suObjSize = suObjCurrent.size
				suObjLength = suObjCurrent.value.length
				
				// find next/previous objects
				suIndex = 0
				if (suArray.length && document.getElementById) {
					for (suLoop=0;suLoop<suArray.length;suLoop++) {
						suObj = document.getElementById(suArray[suLoop])
						if (suObjCurrent == suObj) {
							suIndex = suLoop
							break
						}
					}
					if (suIndex <= suArray.length) {
						suObjNext = document.getElementById(suArray[suIndex+1])
					}
					if (suIndex > 0) {
						suObjPrevious = document.getElementById(suArray[suIndex-1])
					}
				}
				// move to next/previous field
				if (suObjNext && suObjLength == suObjSize && suEvent.keyCode != 8 && suEvent.keyCode != 46) {
					suObjNext.focus()
					//place cursor at the end of the element's text
					if (suObjNext.setSelectionRange) {
						suObjNext.selectionStart = suObjNext.value.length
						suObjNext.selectionEnd = suObjNext.value.length
					}
					else if (suObjNext.createTextRange && suObjNext.cursorPosition) {
							suObjNext.value = suObjNext.value + suObjNext.cursorPosition.text
							suObjNext.value = suObjNext.value.substring(0,suObjNext.size)
					}
				}
				else if (suObjPrevious && suObjLength == 0 && (suEvent.keyCode == 8 || suEvent.keyCode == 46)) {
					suObjPrevious.focus()
					//place cursor at the end of the element's text
					if (suObjPrevious.setSelectionRange) {
						suObjPrevious.selectionStart = suObjPrevious.value.length
						suObjPrevious.selectionEnd = suObjPrevious.value.length
					}
					else if (suObjPrevious.createTextRange && suObjPrevious.cursorPosition) {
						suObjPrevious.value = suObjPrevious.value + suObjPrevious.cursorPosition.text
						suObjPrevious.value = suObjPrevious.value.substring(0,suObjPrevious.size)
					}
				}
			}
		}
	}
}
//---------------------------------------------------------------


//--- disable input field ---------------------------------------
function disableField(dfObj,dfVal,dfBkg,dfBorder) {
	if (isString(dfObj)) {
		if (document.getElementById) {
			dfObjString = dfObj
			dfObj = document.getElementById(dfObjString)
		}
	}
	if (!dfObj) {
		//nothing
	}
	else if (!isNaN(dfObj.length) && dfObj.type != "select-one" && dfObj.type != "select-multi") {
		for (i=0; i<dfObj.length; i++) {
			dfObj[i].disabled = dfVal
			if (dfObj[i].style) {
				if (dfBkg) {
					dfObj[i].style.backgroundColor = dfBkg
				}
				if (dfBorder) {
					dfObj[i].style.borderColor = dfBorder
				}
			}
		}
	}
	else {
		dfObj.disabled = dfVal
		if (dfObj.style) {
			if (dfBkg) {
				dfObj.style.backgroundColor = dfBkg
			}
			if (dfBorder) {
				dfObj.style.borderColor = dfBorder
			}
		}
	}
}
//---------------------------------------------------------------


// Return a boolean value telling whether the first argument is a string. 
function isString(isObj) {
	if (typeof(isObj) == "string") {
		return true
	}
	else if (typeof(isObj) == "object") {
		return (isObj.toString().match(/string/i) != null)
	}
	else {
		return false
	}
}
//---------------------------------------------------------------


// replacer is a better replace function
function replacer(rString,rFind,rReplace) {
	rStringFinal = rString
	if (isString(rString) && isString(rFind) && isString(rReplace)) {
		if (rStringFinal != "" && rStringFinal != null && rFind != "" && rFind != null) {
			while (rStringFinal.lastIndexOf(rFind) > -1) {
				rStringFinal = rStringFinal.replace(rFind,rReplace)
			}
		}
	}
	return rStringFinal
}
//---------------------------------------------------------------


//--- round a number to X deciaml places ------------------------
function round(rValue, rDecimal) {
	//trap for errors
	if (rValue == "" || isNaN(rValue)) {
		rValue = 0
	}
	if (rDecimal != "" || !isNaN(rDecimal)) {
		if (rDecimal < 0) {
			rDecimal = 0
		}
	}
	
	//do the calculation
	rFinal = Math.round(rValue * Math.pow(10,rDecimal))
	rFinal = rFinal / Math.pow(10,rDecimal)
	rFinal = parseFloat(rFinal)
	
	//add the zeros
	rFinal = rFinal.toString()
	if ((rFinal.substring(rFinal.indexOf(".")+1,rFinal.length)).length < rDecimal) {
		while ((rFinal.toString().substring(rFinal.toString().indexOf(".")+1,rFinal.toString().length)).length < rDecimal) {
			rFinal += "0"
		}
	}
	
	//return the number
	return rFinal
}

//--- resize a window dynamically -------------------------------
function resizeWindow() {
	rwTravelW = false
	rwTravelH = false
	rwW = parseInt(document.body.clientWidth + 28)
	rwH = parseInt(document.body.clientHeight + 40)
	rwX = screen.availWidth
	rwY = screen.availHeight
	
	if (document.body.clientWidth < document.body.scrollWidth) {
		rwTravelW = true
		rwW = parseInt(document.body.clientWidth + 50)
	}
	if (document.body.clientHeight < document.body.scrollHeight) {
		rwTravelH = true
		rwH = parseInt(document.body.clientHeight + 50)
	}
	
	if (rwW > screen.availWidth) {
		rwTravelW = false
		rwW = screen.availWidth
	}
	if (rwH > screen.availHeight) {
		rwTravelH = false
		rwH = screen.availHeight
	}
	
	rwX = (screen.availWidth/2) - (rwW/2)
	rwY = (screen.availHeight/2) - (rwH/2)
	window.moveTo(rwX,rwY)
	if (rwTravelW || rwTravelH) {
		window.resizeTo(rwW,rwH)
		setTimeout("resizeWindow()",10)
	}
}


//---------------------------------------------------------------
function makeSureTracker(mstForm) {
	mstRefNum = false
	mstPcode = false
	mstSearch = false
	mstRefNumErr = false
	mstPcodeErr = false
	mstSearchErr = false
	if (mstForm.RN) {
		mstRefNum = true
		if (mstForm.RN.value == "") {
			mstRefNumErr = true
		}
	}
	if (mstForm.PC) {
		mstPcode = true
		mstPostalCode = mstForm.PC.value.toString().toUpperCase()
		for (i=0; i<mstPostalCode.length; i++) {
			mstPostalCode = replacer(mstPostalCode," ","")
			mstPostalCode = replacer(mstPostalCode,"-","")
		}
		mstForm.PC.value = mstPostalCode
		if (mstForm.PC.value.length < 6 || mstForm.PC.value.length > 6) {
			mstPcodeErr = true
		}
	}
	if (mstForm.S) {
		mstSearch = true
		if (mstForm.S.value == "") {
			mstSearchErr = true
		}
	}
	
	if (mstRefNum && mstRefNumErr) {
		alert("Baka Wireless\n\nPlease Enter a Reference Number!")
		mstForm.RN.focus()
		return false
	}
	else if (mstPcode && mstPcodeErr) {
		alert("Baka Wireless\n\nPlease Enter a Valid Postal Code!")
		mstForm.PC.focus()
		return false
	}
	else if (mstSearch && mstSearchErr) {
		alert("Baka Wireless\n\nPlease Enter a Reference Number!")
		mstForm.S.focus()
		return false
	}
	else {
		return true
	}
}


//---------------------------------------------------------------
function toggleMiniCart(tmcToggle) {
	if (document.getElementById) {
		tmcObject = document.getElementById("minicart")
		if (tmcToggle) {
			showTrackOrder(false)
			if (tmcObject.style.display == "block") {
				showMiniCart(false)
			}
			else {
				showMiniCart(true)
			}
		}
		//moveMiniCart()
		return false
	}
	else {
		return true
	}
}
function toggleTrackOrder(ttoToggle) {
	if (document.getElementById) {
		ttoObject = document.getElementById("minitracker")
		if (ttoToggle) {
			showMiniCart(false)
			if (ttoObject.style.display == "block") {
				showTrackOrder(false)
			}
			else {
				showTrackOrder(true)
			}
		}
		//moveTrackOrder()
		return false
	}
	else {
		return true
	}
}
function showTrackOrder(stoToggle) {
	if (document.getElementById) {
		stoObject = document.getElementById("minitracker")
		stoObject.style.display = (stoToggle) ? "block" : "none"
		showHideSelects(false,stoObject)
	}
}
function showMiniCart(smcToggle) {
	if (document.getElementById) {
		smcObject = document.getElementById("minicart")
		smcObject.style.display = (smcToggle) ? "block" : "none"
		showHideSelects(false,smcObject)
	}
}
//function moveMiniCart() {
//	if (document.getElementById) {
//		mmcObject = document.getElementById("minicart")
//		mmcObject.style.left = parseInt(document.body.clientWidth)-305
//	}
//}
//function moveTrackOrder() {
//	if (document.getElementById) {
//		mtoObject = document.getElementById("minitracker")
//		mtoObject.style.left = parseInt(document.body.clientWidth)-423
//	}
//}
//function updateFloaters() {
//	moveMiniCart()
//	moveTrackOrder()
//}


//---------------------------------------------------------------
function showHideSelects(shsToggle,shsObject) {
	if (document.getElementsByTagName && navigator.appName.indexOf("Microsoft") >= 0) {
		shsSelects = document.getElementsByTagName("select")
		for (i=0; i<shsSelects.length; i++) {
			if (shsToggle) {
				shsSelects[i].style.visibility = "visible"
			}
			else if (!shsToggle && hitTest(shsObject,shsSelects[i])) {
				shsSelects[i].style.visibility = "hidden"
			}
			else if (!shsToggle && !hitTest(shsObject,shsSelects[i])) {
				shsSelects[i].style.visibility = "visible"
			}
		}
	}
}
function hitTest(htObj1, htObj2) {
	
	htReturn = false
	
	htObj1Coords = getCoords(htObj1)
	htObj1Left = htObj1Coords[0]
	htObj1Top = htObj1Coords[1]
	htObj1Right = htObj1Coords[0]+htObj1Coords[2]
	htObj1Bottom = htObj1Coords[1]+htObj1Coords[3]
	
	
	htObj2Coords = getCoords(htObj2)
	htObj2Left = htObj2Coords[0]
	htObj2Top = htObj2Coords[1]
	htObj2Right = htObj2Coords[0]+htObj2Coords[2]
	htObj2Bottom = htObj2Coords[1]+htObj2Coords[3]
	
	if ((htObj1Left >= htObj2Left && htObj1Left <= htObj2Right) && (htObj1Top >= htObj2Top && htObj1Top <= htObj2Bottom)) {
		htReturn = true
	}
	else if ((htObj2Left >= htObj1Left && htObj2Left <= htObj1Right) && (htObj2Top >= htObj1Top && htObj2Top <= htObj1Bottom)) {
		htReturn = true
	}
	else if ((htObj1Right <= htObj2Right && htObj1Right >= htObj2Left) && (htObj1Bottom <= htObj2Bottom && htObj1Bottom >= htObj2Top)) {
		htReturn = true
	}
	else if ((htObj2Right <= htObj1Right && htObj2Right >= htObj1Left) && (htObj2Bottom <= htObj1Bottom && htObj2Bottom >= htObj1Top)) {
		htReturn = true
	}
	
	return htReturn
}


//--- finds the X/Y and Width/Height of any HTML element --------
function getCoords(gcObj) {
	gcCoords = new Array(3)
	gcCoords[0] = 0
	gcCoords[1] = 0
	gcCoords[2] = 0
	gcCoords[3] = 0
	if (typeof(gcObj) != "object") {
		gcObj = document.getElementById(gcObj)
	}
	if (document.getElementById) {
		if (gcObj && gcObj.offsetParent) {
			gcCoords[2] = gcObj.offsetWidth
			gcCoords[3] = gcObj.offsetHeight
			while (gcObj.offsetParent) {
				gcCoords[0] += gcObj.offsetLeft
				gcCoords[1] += gcObj.offsetTop
				gcObj = gcObj.offsetParent
			}
		}
	}
	return gcCoords
}
// --- gets the viewport size -----------------------------------
function getViewportSize() {
	
	gvsArray = new Array()
	gvsArray[0] = 0
	gvsArray[1] = 0
	
	if (document.body) {
		gvsArray[0] = document.body.clientWidth
		gvsArray[1] = document.body.clientHeight
	}
	else if (document.documentElement && document.documentElement.clientWidth) {
		gvsArray[0] = document.documentElement.clientWidth
		gvsArray[1] = document.documentElement.clientHeight
	}
	else if (self.innerWidth) {
		gvsArray[0] = self.innerWidth
		gvsArray[1] = self.innerHeight
	}
	return gvsArray
}


//---------------------------------------------------------------
function addHandler(ahObj,ahEvent,ahFunction) {
	if (ahObj.attachEvent) {
		ahObj.attachEvent("on"+ahEvent,ahFunction)
	}
	else {
		ahObj.addEventListener(ahEvent,ahFunction,false)
	}
}


//---------------------------------------------------------------
function mouseOverHandler(mohEvent) {
	mohObject = null
	if (mohEvent.srcElement) {
		mohObject = mohEvent.srcElement
	}
// using CSS for opera and gecko browsers
//	else if (mohEvent.target) {
//		mohObject = mohEvent.target
//	}
	while (mohObject && !mohObject.disabled) {
		if (mohObject.className == "inputBtn" && mohEvent.type == "mouseout") {
			mohObject.style.backgroundColor = "#004990"
			mohObject.style.borderColor = "#63a1d5"
			break
		}
		else if (mohObject.className == "inputBtn" && mohEvent.type == "mouseover") {
			mohObject.style.backgroundColor = "#0051b6"
			mohObject.style.borderColor = "#009dff"
			break
		}
		else if (mohObject.className == "inputBtn" && mohEvent.type == "mousedown") {
			mohObject.style.borderStyle = "inset"
			break
		}
		else if (mohObject.className == "inputBtn" && mohEvent.type == "mouseup") {
			mohObject.style.borderStyle = "outset"
			break
		}
		else if (mohObject.className == "accschecker" && mohEvent.type == "mouseout") {
			mohObject.style.backgroundColor = "#fff"
			break
		}
		else if (mohObject.className == "accschecker" && mohEvent.type == "mouseover") {
			mohObject.style.backgroundColor = "#f2f2f2"
			break
		}
		else if (mohObject.className == "featchecker" && mohEvent.type == "mouseout") {
			mohObject.style.color = "#000"
			mohObject.style.borderColor = "#ffffff"
			break
		}
		else if (mohObject.className == "featchecker" && mohEvent.type == "mouseover") {
			mohObject.style.color = "#800"
			mohObject.style.borderColor = "#e2e2e2"
			break
		}
		else if (mohObject.className == "prodcompare" && mohEvent.type == "mouseout") {
			mohObject.style.color = "#000"
			break
		}
		else if (mohObject.className == "prodcompare" && mohEvent.type == "mouseover") {
			mohObject.style.color = "#800"
			break
		}
		
		mohObject = mohObject.offsetParent
	}
}

ucfSpacer = false
function updateCartFloater() {
	if (ucfSpacer) {
		ucfSpacerTop = ucfSpacer.getAttribute("scrollPosition")
		ucfDocument = (document.body.scrollTop) ? document.body.scrollTop : document.documentElement.scrollTop
		if (parseFloat(ucfDocument)+50 > ucfSpacerTop) {
			ucfSpacer.style.borderTop = "1px dashed #004090"
			ucfSpacer.style.marginTop = parseFloat(ucfDocument)+50 - ucfSpacerTop
		}
		else {
			ucfSpacer.style.borderTop = 0
			ucfSpacer.style.marginTop = 0
		}
	}
}
function setCartFloater() {
	if (document.getElementById) {
		ucfSpacer = document.getElementById("nav_strecher")
		if (ucfSpacer) {
			ucfSpacerTop = parseFloat(getCoords(ucfSpacer)[1])
			ucfSpacer.setAttribute("scrollPosition",ucfSpacerTop)
		}
	}
}
addHandler(window,"load",setCartFloater)
addHandler(window,"scroll",updateCartFloater)
addHandler(document,"scroll",updateCartFloater)