var IE4 = (document.all && !document.getElementById) ? true : false;
var NS4 = (document.layers) ? true : false;
var IE5 = (document.all && document.getElementById) ? true : false;
var NS6 = (document.getElementById && !document.all) ? true : false;
var IE = (IE4 || IE5)
var NS = (NS4 || NS6)
var theAgent = navigator.userAgent
var isMac = (theAgent.indexOf("Mac") >= 0) ? true : false
var browser = retBrowser()

var oneMinute = 60 * 1000
var oneHour = 60 * oneMinute
var oneDay = 24 * oneHour
var oneWeek = 7 * oneDay
var today = new Date()

// alert ( today ) 

var Months = new Array()
Months["1"] = "January"
Months["2"] = "February"
Months["3"] = "March"
Months["4"] = "April"
Months["5"] = "May"
Months["6"] = "June"
Months["7"] = "July"
Months["8"] = "August"
Months["9"] = "September"
Months["10"] = "October"
Months["11"] = "November"
Months["12"] = "December"

var MonthsNumDays = new Array()
MonthsNumDays[0] = 31
MonthsNumDays[1] = ( today.getFullYear() % 4 ) ? 28 : 29
MonthsNumDays[2] = 31
MonthsNumDays[3] = 30
MonthsNumDays[4] = 31
MonthsNumDays[5] = 30
MonthsNumDays[6] = 31
MonthsNumDays[7] = 31
MonthsNumDays[8] = 30
MonthsNumDays[9] = 31
MonthsNumDays[10] = 30
MonthsNumDays[11] = 31

var weekDays = new Array()
weekDays[0] = "Sunday"
weekDays[1] = "Monday"
weekDays[2] = "Tuesday"
weekDays[3] = "Wednesday"
weekDays[4] = "Thursday"
weekDays[5] = "Friday"
weekDays[6] = "Saturday"

function retBrowser(){
	if ( theAgent.indexOf("Safari") >= 0) {
		return 'Safari'
	} else if ( theAgent.indexOf("Firefox") >= 0) {
		return 'Firefox'
	} else if ( theAgent.indexOf("MSIE") >= 0) {
		return 'Explorer'
	} else {
		return 'unknown'
	}
}

function retDate(d,m,y,h,min,s){
	m = parseInt( m ) 
	var nd =  new Date("" + Months[m] + " " + d + ", " + y)
	if(h){nd.setHours(parseInt(h))}
	if(min){nd.setMinutes(parseInt(min))}
	if(s){nd.setSeconds(parseInt(s))}
	return nd
}

function getDateMod(td,mod){
	var nd = (td) ? td : new Date()
	if(mod){
		var dateInMs = nd.getTime()
		dateInMs += mod
		nd.setTime(dateInMs)
	}
	var str = nd.getDate() + "/" + (nd.getMonth() + 1) + "/" + nd.getFullYear()
	return str
}

function retDay(d,m,y){
	if (d && m && y){
		var cd = retDate(d,m,y)
		var dayName = weekDays[cd.getDay()]
		return dayName
	}
}

var targetDate = new Date()
var dateInMs = targetDate.getTime()
dateInMs += oneWeek
targetDate.setTime(dateInMs)

function getFront(mainStr,searchStr){
	foundOffset = mainStr.indexOf(searchStr)
	if (foundOffset == -1) {
		return null
	}
	return mainStr.substring(0,foundOffset)
}

function getEnd(mainStr,searchStr){
	foundOffset = mainStr.indexOf(searchStr)
	if (foundOffset == -1) {
		return null
	}
	return mainStr.substring(foundOffset+searchStr.length,mainStr.length)
}

function insertString(mainStr,searchStr,insertStr) {
	var front = getFront(mainStr,searchStr)
	var end = getEnd(mainStr,searchStr)
	if (front != null && end != null) {
		return front + insertStr + searchStr + end
	}
	return null
}

function deleteString(mainStr,deleteStr) {
	return replaceString(mainStr,deleteStr,"")
}

function replaceString(mainStr,searchStr,replaceStr) {
	var front = getFront(mainStr,searchStr)
	var end = getEnd(mainStr,searchStr)
	if (front != null && end != null) {
		return front + replaceStr + end
	}
	return null
}

function substString(mainStr,searchStr,replaceStr) {
	while (replaceString(mainStr,searchStr,replaceStr)) {
		mainStr = replaceString(mainStr,searchStr,replaceStr)
	}
	return mainStr
}

function stripZeros(inputStr) {
	var result = inputStr
	while (result.substring(0,1) == "0") {
		result = result.substring(1,result.length)
	}
	return result
}

function isEmpty(inputStr) {
	if (inputStr == "" || inputStr == null) {
		return true
	}
	return false
}

function isFieldEmpty(aTextField) {
   if ((aTextField.value.length==0) ||
   (aTextField.value==null)) {
      return true;
   }
   else { return false; }
}	

function isNumber( inputStr , exceptions ) {			// exceptions is an array of characters to not worry about
	for (var i = 0; i < inputStr.length; i++) {
		var oneChar = inputStr.substring(i, i + 1)
		if (oneChar < "0" || oneChar > "9") {
			accept = false
			if ( exceptions ) {
				for ( n= 0 ; n < exceptions.length ; n++ ) {
					if ( oneChar == exceptions[n] ) {
						accept = true
					}	
				}
			}
			if ( ! accept ) {
				return false
			}
		}
	}
	return true
}

function hasFstop(inputStr) {
	for (var i = 0; i < inputStr.length; i++) {
		var oneChar = inputStr.substring(i, i + 1)
		if (oneChar == ".") {
			return true
		}
	}
	return false
}

function formatTime(t) { 
	if(t){
		t = "" + t
		var temp = t.split(":")
		if(temp.length > 2){
			temp.length = 2
			t = temp.join(":")
		}
		re = new RegExp (":00","gi")
		newT = t.replace(re,""); newT = newT.toLowerCase()
		c = t.indexOf(":",1)
		h =  "" + parseInt(t.slice(0,c),10)
		if (newT.indexOf("pm",1) >= 0){
			var hh = parseInt(h) + 12
		} else { 
			var hh = parseInt(h) 
		}
		var temp = getEnd(newT,h)
		var min = parseInt(substString(getEnd(newT,h),":",""),10)
		var prem = (min < 10) ? "0" : ""
		var min = (isNaN(min)) ? ":00" : ":" + prem + min
		var midC = (h == 12) ? 12 : 0
		if(hh < 12){
			var tt = "" + hh + min + " am"
		} else {
			var tt = ((newT.indexOf("pm",1) < 0 || newT.indexOf("am",1) < 0) && hh == 12) ? hh : hh - 12 
			tt = (tt == 0) ? "" + tt + min + " am" : "" + tt + min + " pm"
		}
		tt = tt.toLowerCase()
		return tt
	} else { return "" }
}

function timeSplit(a){
	var h = getFront(a,":")
	this.hr = (a.indexOf("pm") > -1 && h != 12) ? parseInt(h) + 12 : parseInt(h) 
	var temp = replaceString(a,h + ":","") 
	this.min = getFront(temp," ")
}

function capitalise(t,w){
	t = "" + t
	if(w){
		var tSplit = t.split(" ")
		for (var i = 0; i < tSplit.length; i++){
			tSplit[i] = capWord(tSplit[i])
		}
		t = tSplit.join(" ")
	} else {
		t = capWord(t)
	}
	return t
}

function capWord(t){
	t = "" + t
	tl = t.length
	fl = t.substring(0,1)
	fl = fl.toUpperCase()
	ol = t.substring(1,tl)
	ol = ol.toLowerCase()
	return  fl + ol
}

// setVal and retVal should not be needed. Assign an id to the element and use document.getElementById(theID) instead.
function setVal(theForm,elmntName,changeTo){ // Sets an element in a form to a value. Useful where there is an element with a space in its name!
	for (var i = 0; i < theForm.elements.length; i++){
		if (elmntName == theForm.elements[i].name){
			theForm.elements[i].value = changeTo
			return theForm.elements[i].value
		}
	}
}

function retVal(theForm,elmntName){ // Returns a value from a specified form element. See setVal
	for (var i = 0; i < theForm.elements.length; i++){
		if (elmntName == theForm.elements[i].name){
			return theForm.elements[i].value
		}
	}
	return null
}

function retFormObj(theForm,elmntName){
	for (var i = 0; i < theForm.elements.length; i++){
		if (elmntName == theForm.elements[i].name){
			return theForm.elements[i]
		}
	}
	return null
}

function retFormElmnt(theForm,elmntName){
	for (var i = 0; i < theForm.elements.length; i++){
		if (elmntName == theForm.elements[i].name){
			return theForm.elements[i]
		}
	}
	return null
}

function debugForm(f,show){
	var a = "Name = " + f.name + "\r"
	a += "Action = " + f.action + "\r"
	a += "Method = " + f.method + "\r"
	a += "Target = " + f.target + "\r"
	a += "Encoding = " + f.encoding + "\r"
	a += "-----Elements-----\r"
	for (var i = 0; i < f.elements.length;i++){
		a += "Type; " + f.elements[i].type + ", Name; " + f.elements[i].name + " = " + f.elements[i].value + "\r"
	}
	if(show){
		showValue(a)
	} else {
		alert(a)
	}
}

function formToString(f){
	var inps = new Array()
	for (var i = 0; i < f.elements.length;i++){
		inps[inps.length] = new top.formInput("type:" + f.elements[i].type,"name:" + f.elements[i].name,"cont:" + f.elements[i].value)
	}
	return top.retForm("name:" + f.name,"act:" + f.action,"meth:" + f.method,"trgt:" + f.target,new top.argObj("inputs",inps))
}

function showProps(obj,objName,act,traverse){
	var result = ""
	for (var i in obj){
		try{ result += objName + "." + i + " = " + obj[i] + "\n" } catch ( e ) {}
		if ( traverse ) {
			if ( typeof obj[i] == 'object' ) {
				showProps ( obj[i] , objName + "." + i , ret , show , traverse )
			}
		}
	}
	if( act == 'return' ){
		return result
	} else if ( act == 'show' ) {
		showValue ( result , objName , "c:138" , "r:43" )
	} else {
		alert( result )
	}
}

function showValue(val,name,r,c,ww,wh){
	var args = parseArgs(showValue.arguments)
	var sh = screen.availHeight; var sw = screen.availWidth; var ww = (args.w) ? args.w : 1000; var wh = (args.h) ? args.h : 640
	var styl = '<style type="text/css">textarea{ height:' + wh + '; width:' + ww + ';} body { margin: 0px; }</style>' 
	var scpt = 	'<script type="application/javascript">'
	scpt += 	'alert( "sdfsdf" ) '
	scpt +=		'function rsze() {'
	scpt +=		'	alert ( "sdfsdf" ) '
	scpt += 	'}'
	scpt += 	'window.onresize = rsze'
	scpt +=		'</script>' 
	var html = "<html><head><title>" + ((args.title) ? args.title : "Show Value") + "</title>" + styl + "</" + "head>"
	html += "<body bgcolor=\"#ffffff\"><form name=\"disp\">"
	html +=	"<textarea id='showt' name=\"showtext\" rows=\"" + ((args.r) ? args.r : "24") + "\" cols=\"" + ((args.c) ? args.c : "81") + "\"></" + "textarea></" + "form>"
	html += "</" + "body></" + "html>"
	var winName = (name) ? name : ''
	var newWin = window.open("", winName , "height=" + wh + ",width=" + ww + ",resizable") 
	newWin.document.write(html)
	newWin.moveTo(parseInt((sw - ww)/2),parseInt((sh - wh)/2)-20)
	newWin.document.close()
	showt = newWin.document.getElementById( 'showt' ) 
	try{
		newWin.disp.showtext.value = (args.val) ? args.val : val //: "Error: need to sepicify a value to display"
	} catch ( e ) {
		showt.value = (args.val) ? args.val : val
	}
	newWin.focus()
}

function helpem(hlp,evnt,id,l){
//	try { 
//		hlp.innerHTML = (id) ? helpObjs[id].txt : 'This is the help system'
//		hlp.style.width = helpObjs[id].width
//		var l = (helpObjs[id].left) ? parseInt(helpObjs[id].left) + ((l) ? l : 0) : 10
//		var t = (helpObjs[id].top) ? parseInt(helpObjs[id].top) : 15
//	} catch(e){
	//	showProps ( evnt ) 
		var l = 10
		var t = 15
//	}
	try{
		hlp.style.pixelLeft = (document.body.scrollLeft + event.clientX) + l
		hlp.style.pixelTop = (document.body.scrollTop + event.clientY) + t
		hlp.style.visibility="visible";
	} catch(e) {
	//	showProps( e ) 	
	}
}

function showHelpText( evnt , txt ) {
	document.getElementById('helpBox').innerHTML = txt
	showHelp( evnt ) 
}

function showHelp(evnt,id){
	try{
		var hlp,lft
		try {
			if(top.Body.bBody.BookingsMake && top.Body.bBody.document.getElementById('makebook').style.visibility == 'visible'){
				hlp = top.Body.bBody.BookingsMake.document.getElementById('helpBox')
				lft = -200
			} else if(top.Body.bBody.BookingsSearch && top.Body.bBody.document.getElementById('booksrch').style.visibility == 'visible'){
				hlp = top.Body.bBody.BookingsSearch.document.getElementById('helpBox')
				lft = -200
			} else {
				hlp = document.getElementById('helpBox')
				lft = false
			}
		} catch (e) {
			hlp = document.getElementById('helpBox')
			lft = false
		}
		helpem(hlp,evnt,id,lft)
	} catch(e) {
		showProps(e,'e')
	}
}

function hideHelp(){
	var hlp = document.getElementById('helpBox')
	hlp.innerHTML = ""
	hlp.style.visibility="hidden"
	try{
		var hlp2 = top.Body.bBody.BookingsMake.document.getElementById('helpBox')
		hlp2.innerHTML = ""
		hlp2.style.visibility="hidden"
	} catch(e) {
	
	}
	try{
		var hlp3 = top.Body.bBody.BookingsSearch.document.getElementById('helpBox')
		hlp3.innerHTML = ""
		hlp3.style.visibility="hidden"
	} catch(e) {
	
	}
}

function blankFrame(){
	return '<' + 'html><' + 'head><' + '/' + 'head><body' + ' bgcolor="white"><' + '/' + 'body><' + '/' + 'html>'
}

// Browser Window Size and Position
// copyright Stephen Chapman, 3rd Jan 2005, 8th Dec 2005
// you may copy these functions but please keep the copyright notice as well

function pageWidth() {
	return window.innerWidth != null? window.innerWidth : document.documentElement && document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body != null ? document.body.clientWidth : null;
} 

function pageHeight() {
	return window.innerHeight != null? window.innerHeight : document.documentElement && document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body != null? document.body.clientHeight : null;
} 

function posLeft() {
return typeof window.pageXOffset != 'undefined' ? window.pageXOffset :document.documentElement && document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ? document.body.scrollLeft : 0;
} 

function posTop() {
	return typeof window.pageYOffset != 'undefined' ? window.pageYOffset : document.documentElement && document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ? document.body.scrollTop : 0;
} 

function posRight() {
	return posLeft()+pageWidth();} function posBottom() {return posTop()+pageHeight();
}
 
 
/* Script by: www.jtricks.com
 * Version: 20060325
 * Latest version:
 * www.jtricks.com/javascript/blocks/ordering.html
 */
function getAbsoluteDivs()
{
    var arr = new Array();
    var all_divs = document.body.getElementsByTagName("DIV");
    var j = 0;

    for (i = 0; i < all_divs.length; i++)
        if (all_divs.item(i).style.position=='absolute')
        {
            arr[j] = all_divs.item(i);
            j++;
        }

    return arr;
}

function bringToFront(id,zin)
{
	if (btfLastId){
		document.getElementById(btfLastId).style.zIndex = btfLastZin;	
	}
	btfLastId = id;
	btfLastZin = zin;
    if (!document.getElementById ||
        !document.getElementsByTagName)
        return;

    var obj = document.getElementById(id);
    var divs = getAbsoluteDivs();
    var max_index = 0;
    var cur_index;

    // Compute the maximal z-index of
    // other absolute-positioned divs
    for (i = 0; i < divs.length; i++)
    {
        var item = divs[i];
        if (item == obj ||
            item.style.zIndex == '')
            continue;

        cur_index = parseInt(item.style.zIndex);
        if (max_index < cur_index)
        {
            max_index = cur_index;
        }
    }

    obj.style.zIndex = max_index + 1;
}

function sendToBack(id,hgt)
{
	document.getElementById(id).style.height = '50px';	
    if (!document.getElementById ||
        !document.getElementsByTagName)
        return;

    var obj = document.getElementById(id);
    var divs = getAbsoluteDivs();
    var min_index = 999999;
    var cur_index;

    if (divs.length < 2)
        return;

    // Compute the minimal z-index of
    // other absolute-positioned divs
    for (i = 0; i < divs.length; i++)
    {
        var item = divs[i];
        if (item == obj)
            continue;

        if (item.style.zIndex == '')
        {
            min_index = 0;
            break;
        }

        cur_index = parseInt(item.style.zIndex);
        if (min_index > cur_index)
        {
            min_index = cur_index;
        }

    }

    if (min_index > parseInt(obj.style.zIndex))
    {
        return;
    }

    obj.style.zIndex = 1;

    if (min_index > 1)
        return;

    var add = min_index == 0 ? 2 : 1;

    for (i = 0; i < divs.length; i++)
    {
        var item = divs[i];
        if (item == obj)
            continue;

        item.style.zIndex += add;
    }
}

function changeInp(chng,inp,frm){
	var mod = chng*1;
	document.getElementById(inp).value = (1*mod) + (1*document.getElementById(inp).value) * 1;
	document.getElementById(frm).submit();
}

function pausecomp(millis) {
	var date = new Date();
	var curDate = null;
	
	do { curDate = new Date(); } 
	while(curDate-date < millis);
} 

function disableSelection(target){
	if (typeof target.onselectstart!="undefined") //IE route
		target.onselectstart=function(){return false}
	else if (typeof target.style.MozUserSelect!="undefined") //Firefox route
		target.style.MozUserSelect="none"
	else //All other route (ie: Opera)
		target.onmousedown=function(){return false}
	target.style.cursor = "default"
}

