var Timeout = 500;
var loading=1;
var expired=0;
var qualityi=0;
var quality=0;
var displayfeeds=['','','',''];

var feedmode=0;
var viewlock=0;
var modeChanged=0;

newPic = new Array();
newPic[0]=new Image();
newPic[1]=new Image();
newPic[2]=new Image();
newPic[3]=new Image();

var PicLoaded=[0,0,0,0];

var isPTZ=[0,0,0,0];
var feedIndex=[0,1,2,3];

var CFeed=0;

//Get the user specified view mode
if (forceviewmode == -1) {
  viewmode = getCookie("viewmode") || 0;
} else {
  viewmode = forceviewmode;
}

if (viewmode == 2) viewmode = 0; // Backwards compatibility :)

//Disable Java modes if they aren't supported
if (!(navigator.javaEnabled())) { forceJavaScript }

if (viewmode == 1) {
	setCookie("viewmode", 1);
} else {
	setCookie("viewmode", 2);
}

if (forcequality == -1) {
  qualityi = parseInt(getCookie("quality") || 3) - 1;
} else {
  qualityi = forcequality;
}

function forceJavaScript() {
  javaWarning = getCookie("javaWarning") || 0;

  if (javaWarning == 0) {
	alert('No browser Java support was detected on this system. This is not a problem, as you can use JavaScript instead.\nHowever, installation of a Java plugin will allow you to view these feeds at higher framerates and flicker-free.\n\nPlease visit java.sun.com to install Java.');
        setCookie("javaWarning",1);
	forcemode(1);
  }
}

var PageInited = 0;
var AppletInited = 0;
var AllInited = 0;
if (viewmode != 0) { AppletInited = 1; }

function PageInit() {
  PageInited = 1;
  if ((PageInited == 1) & (AppletInited == 1)) { Init(); }
}

function notifyAppletInit() {
  AppletInited = 1;
  if ((PageInited == 1) & (AppletInited == 1)) { Init(); }
}

function Init() {
  if (AllInited == 1) { return false; }
  AllInited = 1;

  for (i=0;i<4;i++) {
   if (i>=feeds) { feednames[i]='$NoFeed'; }
   displayfeeds[i]=enc_feednames[i];
   if (viewmode==0) {
    document.camimage.SetFeedIndex(i+1);
    if (feednames[i]!='$NoFeed') {
      document.camimage.SetFeedName(enc_feednames2[i]);
    } else {
      document.camimage.SetFeedName('%24%00%4e%00%6f%00%46%00%65%00%65%00%64%00');
    }
   }
  }

  document.controls.reset();
  document.controls.displayview[0].checked=true;
//  zoom(1);
//  addFeed(feedname);
  document.controls.viewmodeopt.selectedIndex=viewmode;
  setquality(qualityi);
  document.controls.quallist.selectedIndex = qualityi;
  loading=0;
  if (viewmode == 0) document.camimage.CamStart();

  if (ptzenabled == 1) {
    document.getElementById('ptzscrolls').style.display='';
    document.getElementById('ptzcontrols').style.display='';
  } else {
    document.getElementById('ptzscrolls').style.display='none';
    document.getElementById('ptzcontrols').style.display='none';
  }

  //Stop requesting live image after duration
  if (duration != 0) { window.setTimeout("expireSession()", (duration + 5) * 1000); }
}

function SetStatus(c) {
 PicLoaded[c]=1;
}

function SetStatus0() {
 SetStatus(0);
}
function SetStatus1() {
 SetStatus(1);
}
function SetStatus2() {
 SetStatus(2);
}
function SetStatus3() {
 SetStatus(3);
}

function loadNewPic()
{
    var u=0;
    uniq = new Date();
    uniq = uniq.getTime();
    if (viewmode != 1) return;

    if (feedmode==0) {
     if (PicLoaded[0]==1) {
      document.images.camimage.src = newPic[0].src;
	  if (ptzenabled) {
	    if ((document.images.panimage.width != document.images.camimage.width) || (document.images.tiltimage.height != document.images.camimage.height)) {
		  document.images.panimage.width=document.images.camimage.width;
		  document.images.panimage.src = "/ptz/gradiant.gif?orientation=0&size=" + document.images.camimage.width;
		  document.images.tiltimage.height=document.images.camimage.height;
		  document.images.tiltimage.src = "/ptz/gradiant.gif?orientation=1&size=" + document.images.camimage.height;
		}
	  }

      newPic[0].src = MakeURL(enc_feedname);
      PicLoaded[0]=0;
      newPic[0].onload=SetStatus0;
      newPic[0].onerror=SetStatus0;
      u=1;
     }
    } else {
     for (i=0;i<4;i++) {
      if (PicLoaded[i]==1) {
       if (i==0) document.images.image1.src=newPic[i].src;
       if (i==1) document.images.image2.src=newPic[i].src;
       if (i==2) document.images.image3.src=newPic[i].src;
       if (i==3) document.images.image4.src=newPic[i].src;
       newPic[i].src = MakeURL(displayfeeds[i]);
       PicLoaded[i]=0;
       if (i==0) { newPic[i].onload=SetStatus0; newPic[i].onerror=SetStatus0; }
       if (i==1) { newPic[i].onload=SetStatus1; newPic[i].onerror=SetStatus1; }
       if (i==2) { newPic[i].onload=SetStatus2; newPic[i].onerror=SetStatus2; }
       if (i==3) { newPic[i].onload=SetStatus3; newPic[i].onerror=SetStatus3; }
       u=1;
      }
     }
    }
    if (u==1) {
     window.status="Live video... " + uniq;
    }
	if (expired == 0) {
      window.setTimeout("loadNewPic()", Timeout);
	}
}

function firstPic()
{
   if (viewmode != 1) return;
   newPic[0].onload = SetStatus0;
   newPic[0].onerror= SetStatus0;
   newPic[0].src = MakeURL(enc_feedname);
   document.images.camimage.onload='';
   window.setTimeout("loadNewPic()", Timeout);
}

function expireSession() {
  expired=1;
  if (viewmode != 1) document.camimage.CamStop();
}

function Setfeed(feed)
{
  feedname=feed;
  if (viewmode == 0) {
    if (loading == 0) { document.camimage.SetFeedIndex(0); document.camimage.SetStreamSource(MakeMJPEGURL(feed)); }
  } else {
    if (loading == 0) { enc_feedname = feed; }
  }
}

function MakeURL(feed) {
var URL;

  uniq = new Date();
  uniq = uniq.getTime();

  URL = "/image.jpg?feed=" + feed;
  if (quality != 0) { URL = URL + "&quality=" + quality; }
  URL = URL + "&uniq=" + uniq;
  return URL;
}

function MakeMJPEGURL(feed) {
var URL;

  if (feed == undefined) {
    URL = "video.mjpg?feed=$NoFeed";
  } else {
    URL = "video.mjpg?feed=" + feed;
    if (quality != 0) { URL = URL + "&quality=" + quality; }
  }
  return URL;
}

function setquality(newquality) {
  setCookie("quality", newquality + 1);

  if (newquality == 0) { //Highest
    quality = 0;
  } else if (newquality == 1) { //High
    quality = 70;
  } else if (newquality == 2) { //Medium
    quality = 48;
  } else if (newquality == 3) { //Low
    quality = 20;
  } else { //Lowest
    quality = 8;
  }

  if (viewmode == 0) {
    if (feedmode == 0) {
	document.camimage.SetFeedIndex(0);
	document.camimage.SetStreamSource(MakeMJPEGURL(enc_feedname));
    } else {
	for (n=0; n<4; n++) {
	  document.camimage.SetFeedIndex(n+1);
	  document.camimage.SetStreamSource(MakeMJPEGURL(displayfeeds[n]));
	}
    }
  }
}

var zl=3;

function notifyResChange(width, height){
  owidth = width;
  oheight = height;
  document.camimage.width=width;
  document.camimage.height=height;

  document.images.panimage.width=width;
  document.images.panimage.src = "/ptz/gradiant.gif?orientation=0&size=" + width;
  document.images.tiltimage.height=height;
  document.images.tiltimage.src = "/ptz/gradiant.gif?orientation=1&size=" + height;
}

function zoom(zlevel) {
  if (viewmode != 1) {
	document.camimage.zoom(zlevel);
	return;
  }

  if ((zlevel == 2) && (zl > 1)) zl--; //Out
  if (zlevel == 1) { zl = 3; } //native
  if ((zlevel == 0) && (zl < 5)) zl++; //In

  w=owidth; h=oheight;

  if (zl == 1) { w = w / 4; h = h / 4; }
  if (zl == 2) { w = w / 2; h = h / 2; }
//  if (zl == 3) { w = w; h = h; }
  if (zl == 4) { w = w * 2; h = h * 2; }
  if (zl == 5) { w = w * 4; h = h * 4; }

  if ((feedmode==1) && (viewmode==1)) { w = w / 2; h = h / 2; } 

  if (feedmode==0) {
    document.images.camimage.width=w;
    document.images.camimage.width=w;
  } else {
    document.images.image1.width=w; document.images.image1.height=h; 
    document.images.image2.width=w; document.images.image2.height=h; 
    document.images.image3.width=w; document.images.image3.height=h; 
    document.images.image4.width=w; document.images.image4.height=h; 
  }

  document.images.panimage.width=w;
  document.images.panimage.src = "/ptz/gradiant.gif?orientation=0&size=" + w
  document.images.tiltimage.height=h;
  document.images.tiltimage.src = "/ptz/gradiant.gif?orientation=1&size=" + h
}

function modeChangeCallback() {
  modeChanged=modeChanged-1;

  if (modeChanged>0) return;

  if (feedmode == 1) {
//   document.image1.SetStreamSource(MakeMJPEGURL(displayfeeds[0])); document.image1.CamStart();
//   document.image2.SetStreamSource(MakeMJPEGURL(displayfeeds[1])); document.image2.CamStart();
//   document.image3.SetStreamSource(MakeMJPEGURL(displayfeeds[2])); document.image3.CamStart();
//   document.image4.SetStreamSource(MakeMJPEGURL(displayfeeds[3])); document.image4.CamStart();
  } else {
//    document.camimage.CamStart();
  }
}

function fchange(i) {
 if (viewlock == 1) return;

 viewlock = 1;

 if (i==0) {
  if (viewmode != 1) {
	document.camimage.SetFeedMode(0);
  }

  document.getElementById('fheader').style.display='none';
  document.getElementById('ffooter').style.display='none';

  if (viewmode == 1) {
   document.getElementById('onefeed').style.display='';
   document.getElementById('fourfeeds').style.display='none';
  }

  document.controls.displayview[0].checked=true;
  for (f=0; f < feeds; f++) {
   if (document.controls.feed.options[f].selected==true) {
    document.controls.feed.options[f].selected=false;
   }
  }
//  if (selects[3]<256) document.controls.feed.options[selects[3]].selected=true; else document.controls.feed.options[1].selected=true;
  document.controls.feed.multiple=false;
  if (viewmode != 1) {
    modeChanged=1;
  } else {
    newPic[0].onload=SetStatus0;
    newPic[0].onerror=SetStatus0;
  }
 }

 if (i==1) {
  if (viewmode != 1) document.camimage.CamStop();

  document.getElementById('fheader').style.display='';
  document.getElementById('ffooter').style.display='';

  document.controls.displayview[1].checked=true;

  if (viewmode == 1) {
   document.getElementById('onefeed').style.display='none';
   document.getElementById('fourfeeds').style.display='';
  }

  if (viewmode == 0) {
   document.camimage.SetFeedIndex(1); document.camimage.SetStreamSource(MakeMJPEGURL(displayfeeds[0]));
   document.camimage.SetFeedIndex(2); document.camimage.SetStreamSource(MakeMJPEGURL(displayfeeds[1]));
   document.camimage.SetFeedIndex(3); document.camimage.SetStreamSource(MakeMJPEGURL(displayfeeds[2]));
   document.camimage.SetFeedIndex(4); document.camimage.SetStreamSource(MakeMJPEGURL(displayfeeds[3]));
   document.camimage.SetFeedMode(1);
  } else {
   newPic[0].onload=SetStatus0; newPic[0].onerror=SetStatus0;
   newPic[1].onload=SetStatus1; newPic[1].onerror=SetStatus1;
   newPic[2].onload=SetStatus2; newPic[2].onerror=SetStatus2;
   newPic[3].onload=SetStatus3; newPic[3].onerror=SetStatus3;
   newPic[0].src = MakeURL(displayfeeds[0]);
   newPic[1].src = MakeURL(displayfeeds[1]);
   newPic[2].src = MakeURL(displayfeeds[2]);
   newPic[3].src = MakeURL(displayfeeds[3]);
  }
 }

 if (i == 1) {
   document.getElementById('ptzscrolls').style.display='none';
   document.getElementById('ptzcontrols').style.display='none';
 } else {
  ptzenabled = ptzfeeds[document.controls.feed.selectedIndex];
  if (ptzenabled == 1) {
    document.getElementById('ptzscrolls').style.display='';
    document.getElementById('ptzcontrols').style.display='';
  } else {
    document.getElementById('ptzscrolls').style.display='none';
    document.getElementById('ptzcontrols').style.display='none';
  }
 }

 feedmode=i;
 zoom(-1);

 viewlock = 0;
}

function gotoone(f) {
 fchange(0);

 ptzenabled = isPTZ[f-1];
 if (ptzenabled == 1) {
   document.getElementById('ptzscrolls').style.display='';
   document.getElementById('ptzcontrols').style.display='';
 } else {
   document.getElementById('ptzscrolls').style.display='none';
   document.getElementById('ptzcontrols').style.display='none';
 }

 ind = feedIndex[f-1];

 if (ind != -1) { document.controls.feed.selectedIndex = ind; }

 if (f==1) Setfeed(displayfeeds[0]);
 if (f==2) Setfeed(displayfeeds[1]);
 if (f==3) Setfeed(displayfeeds[2]);
 if (f==4) Setfeed(displayfeeds[3]);
 loadNewPic();
}

var selects=[256,256,256,256];

function updateSelects() {
 var s=256;
 var n=0; m=0;
}

function NewFeedSet() {
 newPic[0].src = MakeURL(displayfeeds[0]);
 newPic[1].src = MakeURL(displayfeeds[1]);
 newPic[2].src = MakeURL(displayfeeds[2]);
 newPic[3].src = MakeURL(displayfeeds[3]);
 newPic[0].onload=SetStatus0; newPic[0].onerror=SetStatus0;
 newPic[1].onload=SetStatus1; newPic[1].onerror=SetStatus1;
 newPic[2].onload=SetStatus2; newPic[2].onerror=SetStatus2;
 newPic[3].onload=SetStatus3; newPic[3].onerror=SetStatus3;
 loadNewPic();
}

function addFeed() {
 if (document.controls.feed.selectedIndex==-1) return;
 var n=0;
 if (feedmode==1) {
  for (i=0;i<4;i++) {
   if (displayfeeds[i]==enc_feednames[document.controls.feed.selectedIndex]) n=1;
  }
  if (n==1) return;
 }

 feedIndex[CFeed] = document.controls.feed.selectedIndex;
 enc_feedname = enc_feednames[document.controls.feed.selectedIndex];
 feedname=feednames[document.controls.feed.selectedIndex];
 displayfeeds[CFeed]=enc_feedname;
 isPTZ[CFeed] = ptzfeeds[document.controls.feed.selectedIndex];

 if (viewmode == 0) {
  document.camimage.SetFeedIndex(CFeed+1);
    if (feednames[document.controls.feed.selectedIndex]!='$NoFeed') {
      document.camimage.SetFeedName(enc_feednames2[document.controls.feed.selectedIndex]);
    } else {
      document.camimage.SetFeedName('%24%00%4e%00%6f%00%46%00%65%00%65%00%64%00');
   }
 }

 if (viewmode == 0) {
  if (feedmode == 0) {
   document.camimage.SetFeedIndex(0);
  } else {
   document.camimage.SetFeedIndex(CFeed+1);
  }
 }

 if (feedmode == 0) {
  ptzenabled = ptzfeeds[document.controls.feed.selectedIndex];
  if (ptzenabled == 1) {
    document.getElementById('ptzscrolls').style.display='';
    document.getElementById('ptzcontrols').style.display='';
  } else {
    document.getElementById('ptzscrolls').style.display='none';
    document.getElementById('ptzcontrols').style.display='none';
  }
 }

 if (viewmode == 0) {
  document.camimage.SetStreamSource(MakeMJPEGURL(enc_feedname));
 }

 CFeed++;
 if ((CFeed>3) || (feednames[CFeed]=='$NoFeed')) CFeed=0;  
}

function forcemode(mode) {
  if (mode == 0) {
	setCookie("javaWarning",0);
  }

  if (mode == 1) {
   setCookie("viewmode", 1);
  } else {
   setCookie("viewmode", 2);
  } 

  document.location="?feed=" + enc_feedname + "&mode=" + mode;
}

function panscrollclick(click) {
  if (navigator.appName=='Netscape') {
    rx = click.clientX - document.controls.panimage.x;
  } else {
    rx = click.offsetX;
  }

  mins = parseInt(rx * (360/(document.controls.panimage.width-1)));
  mins = (mins - 180);
  ptzmove('to&pan=' + mins);
}

function tiltscrollclick(click) {
  if (navigator.appName=='Netscape') {
    rx = click.clientY - document.controls.tiltimage.y;
  } else {
    rx = click.offsetY;
  }

  mins = parseInt(rx * (360/document.controls.tiltimage.height));
  mins = -(mins - 180);
  ptzmove('to&tilt=' + mins);
}

function ptzmove(location) {
  uniq = new Date();
  uniq = uniq.getTime();
  cmd = new Image();
  cmd.src = "/ptz/control.htm?feed=" + feedname + "&move=" + location + "&uniq=" + uniq
}

function ptzzoom(action) {
  uniq = new Date();
  uniq = uniq.getTime();
  cmd = new Image();
  cmd.src = "/ptz/control.htm?feed=" + feedname + "&zoom=" + action + "&uniq=" + uniq
}

function ptzangle(click) {
var angle = 0;

  if (click.ctrlKey) {
	angle = 1;
  } else if (click.shiftKey) {
    angle = 25;
  } else {
    angle = 5;
  }
  
  return "&angle=" + angle;
}