// JavaScript Document

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

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];}}
}

// return the value of the radio button that is checked
// return an empty string if none are checked, or
// there are no radio buttons
function getCheckedValue(radioObj) {
	if(!radioObj)
		return "";
	var radioLength = radioObj.length;
	if(radioLength == undefined)
		if(radioObj.checked)
			return radioObj.value;
		else
			return "";
	for(var i = 0; i < radioLength; i++) {
		if(radioObj[i].checked) {
			return radioObj[i].value;
		}
	}
	return "";
}

// set the radio button with the given value as being checked
// do nothing if there are no radio buttons
// if the given value does not exist, all the radio buttons
// are reset to unchecked
function setCheckedValue(radioObj, newValue) {
	if(!radioObj)
		return;
	var radioLength = radioObj.length;
	if(radioLength == undefined) {
		radioObj.checked = (radioObj.value == newValue.toString());
		return;
	}
	for(var i = 0; i < radioLength; i++) {
		radioObj[i].checked = false;
		if(radioObj[i].value == newValue.toString()) {
			radioObj[i].checked = true;
		}
	}
}

function trimAll(sString)
{
	while (sString.substring(0,1) == ' ') {
		sString = sString.substring(1, sString.length);
	}
	while (sString.substring(sString.length-1, sString.length) == ' ') {
		sString = sString.substring(0,sString.length-1);
	}

	return sString;
}

// Extends the js array object to enable searching the array
// If the item is found, the corresponding key is returned.
// Be sure to test for false with === instead of ==
Array.prototype.array_search = function (s)
{
	for( var i=0; i<this.length; i++ )
	{
		if(this[i] == s) return i;
	}

	return false;
};

Number.prototype.isNull = function (s)
{
  return (s==null);
};

/*  */
/*
 * Define innerText for Mozilla based browsers
 * This is useful to get the text inside of <li></li>
 */
if((typeof HTMLElement != 'undefined') && (HTMLElement.prototype.__defineGetter__ != 'undefined'))
{
    HTMLElement.prototype.__defineGetter__("innerText", function (){
    var r = this.ownerDocument.createRange();
    r.selectNodeContents(this);
    return r.toString();
    });

}

/*
 * This function is for cross-browser compatibility
 *		var grp_name = getElement("grp_name");
 *		if( !grp_name ) alert('Error getting object: grp_name'); else grp_name.value = "";
 */
function getElement(elementName)
{
	var thisElement = false;

	if (document.getElementById)  // this is the way the standards work
		thisElement = document.getElementById(elementName);
	else if (document.all)        // this is the way old msie versions work
		thisElement = document.all[elementName];
	else if (document.layers)     // this is the way nn4 works
		thisElement = document.layers[elementName];

	return thisElement;
}

/*
 * Used by the pwc1.3 windows script to open a new dhtml window
 */
function showPopup(winType, winTitle, winContent, winWidth, winHeight, top)
{
  var win = new Window({className: "alphacube", title: winTitle, width: winWidth, height: winHeight});
  switch (winType)
  {
    case "URL":
      win.setURL(winContent+'?id='+win.getId())
      break;
    case "DIV":
      win.getContent().innerHTML = document.getElementById(winContent).innerHTML;
      break;
    case "VAR":
      win.getContent().innerHTML = winContent;
      break;
  }

  //win.setDestroyOnClose();  THIS IS BUGGY IN IE7 AND THE SCRIPT WORKS FINE WITHOUT IT
  win.showCenter(true,top);
  win.setConstraint(false, {left:0, right:0, top:0, bottom:0});
  win.toFront();
}

function showLoginDialog()
{
  Dialog.confirm($('login').innerHTML, {className:"alphacube", width:350,
                                        okLabel: "login", cancelLabel: "cancel",
                                        onOk:function(win) {doLogin();}
                                       });
}

function doLogin()
{
  var username = getElement("username");
  var password = getElement("password");
  if (!username || !password)
  {
    Windows.focusedWindow.close();
    alert("Your browser is not compatible with this login utility.");
  }
  username = username.value;
  password = password.value;

  // hide the error message if it is being shown
  var login_error_msg = getElement("login_error_msg");
  login_error_msg.innerHTML = "";
  login_error_msg.style.display = "none";

  // hide the form fields
  var login_fields = getElement("login_fields");
  login_fields.style.display = "none";

  // display the progress bar
  var login_processing = getElement("login_processing");
  login_processing.style.display = "block";

  // resize the login window
  Windows.focusedWindow.updateHeight();

  // authenticate the login credentials
  x_doLogin(username,password,cb_doLogin);
}

function cb_doLogin(retVal)
{
  // hide the progress bar
  var login_processing = getElement("login_processing");
  login_processing.style.display = "none";

  // process the value returned from the server
  if (retVal=="LOCKOUT")
  {
    Windows.focusedWindow.close();
    window.location = webRoot+"/admin/login/lockout.php";
  }
  else if (retVal!==true)
  {
    // show the form fields
    var login_fields = getElement("login_fields");
    login_fields.style.display = "block";
    // show the error message
    var login_error_msg = getElement("login_error_msg");
    login_error_msg.innerHTML = retVal;
    login_error_msg.style.display = "block";
    // resize the login window
    Windows.focusedWindow.updateHeight();
    // shake the window back and forth
    new Effect.Shake(Windows.focusedWindow.getId());
  }
  else
  {
    Windows.focusedWindow.close();
    window.location = webRoot+"/admin/index.php";
  }
}

function captureClick(e)
{
  var key;

  if(window.event)
    key = window.event.keyCode; //IE
  else
    key = e.which;              //Firefox

  if (key == 13) doLogin();
}

function jsPause(millis)
{
  var date = new Date();
  var curDate = null;

  do { curDate = new Date(); }
  while(curDate-date < millis);
}

var BrowserDetect = {
  init: function () {
    this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
    this.version = this.searchVersion(navigator.userAgent)
      || this.searchVersion(navigator.appVersion)
      || "an unknown version";
    this.OS = this.searchString(this.dataOS) || "an unknown OS";
  },
  searchString: function (data) {
    for (var i=0;i<data.length;i++)  {
      var dataString = data[i].string;
      var dataProp = data[i].prop;
      this.versionSearchString = data[i].versionSearch || data[i].identity;
      if (dataString) {
        if (dataString.indexOf(data[i].subString) != -1)
          return data[i].identity;
      }
      else if (dataProp)
        return data[i].identity;
    }
  },
  searchVersion: function (dataString) {
    var index = dataString.indexOf(this.versionSearchString);
    if (index == -1) return;
    return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
  },
  dataBrowser: [
    {   string: navigator.userAgent,
      subString: "OmniWeb",
      versionSearch: "OmniWeb/",
      identity: "OmniWeb"
    },
    {
      string: navigator.vendor,
      subString: "Apple",
      identity: "Safari"
    },
    {
      prop: window.opera,
      identity: "Opera"
    },
    {
      string: navigator.vendor,
      subString: "iCab",
      identity: "iCab"
    },
    {
      string: navigator.vendor,
      subString: "KDE",
      identity: "Konqueror"
    },
    {
      string: navigator.userAgent,
      subString: "Firefox",
      identity: "Firefox"
    },
    {
      string: navigator.vendor,
      subString: "Camino",
      identity: "Camino"
    },
    {    // for newer Netscapes (6+)
      string: navigator.userAgent,
      subString: "Netscape",
      identity: "Netscape"
    },
    {
      string: navigator.userAgent,
      subString: "MSIE",
      identity: "Explorer",
      versionSearch: "MSIE"
    },
    {
      string: navigator.userAgent,
      subString: "Gecko",
      identity: "Mozilla",
      versionSearch: "rv"
    },
    {     // for older Netscapes (4-)
      string: navigator.userAgent,
      subString: "Mozilla",
      identity: "Netscape",
      versionSearch: "Mozilla"
    }
  ],
  dataOS : [
    {
      string: navigator.platform,
      subString: "Win",
      identity: "Windows"
    },
    {
      string: navigator.platform,
      subString: "Mac",
      identity: "Mac"
    },
    {
      string: navigator.platform,
      subString: "Linux",
      identity: "Linux"
    }
  ]

};
BrowserDetect.init();
