//===========
// Browser Detect
//===========
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();

// ==========
// Functions for the NGKids site
// (Used outside of MyPage)

// ==========
// Functions for adding a favorite

function AddToFavs(c_id) {
   // TODO: Check if the user is logged in
   //     If not then display an alert and tell themm they should register
   if (cookie_is_set("userId")) {
       add_send(c_id);
   }
   else {
       alert("You must be logged in to add this to your favorites.")
   }
}

function add_send(c_id) {
   var myConn = new XHConn();
   if (!myConn) alert("XMLHTTP not available. Try a newer/better browser.");
   var fnWhenDone = function (oXML) { add_done(oXML.responseText); };
   var paramStr = "cmd=add&contentId=" + c_id;
   myConn.connect("/ngkids_mypage/servlet/FavoritesService", "POST", paramStr, fnWhenDone);
}

function add_done(responseText) {
   // Returns new favorites bin content
   UpdateDiv("favs_bin_container", responseText)
}

function LoadFavsBin() {
   var myConn = new XHConn();
   if (!myConn) alert("XMLHTTP not available. Try a newer/better browser.");
   var fnWhenDone = function (oXML) { add_done(oXML.responseText); };
   var paramStr = "cmd=bin&opt=full";
   myConn.connect("/ngkids_mypage/servlet/FavoritesService", "POST", paramStr, fnWhenDone);
}

// ==========
// Functions for polls

function submitPoll_click(oEvent, p_id) {

      

       // get the cookie
       if(poll_cookie_get('fav_poll_id')){
		 var oDiv = document.getElementById("poll");
               oDiv.innerHTML ="<div class ='poll' id ='poll_result'><p><br/>Oops! Sorry, you can only vote once a day. Thanks for voting but you can come back and vote tomorrow.</p><img alt='Thank you' src='/staticfiles/NGS/NGKids/SiteAssets/img/spacer.gif' border='0' height='60' width='67'><div class='poll_ftr'></div></div>";


       } else {



   // Get Data
   var pollForm = document.forms["poll_input"];
//    var poll_id = pollForm.elements["poll_id"].value;
   var poll_answer_radios = pollForm.elements["poll_answer"];
   var thank_message=pollForm.elements["thank_message"].value;
   var poll_answer = 0;
   for (i = 0; i < poll_answer_radios.length; i++) {
       if (poll_answer_radios[i].checked) {
           // poll_answer = i + 1;
           poll_answer = poll_answer_radios[i].value;
           break;
       }
   }

   if (poll_answer > 0) {
       submitPoll_send(p_id, poll_answer,thank_message);
   }
   else {
       alert("Please select an answer.");
   }


       } // else
}

function submitPoll_send(p_id, p_answer,thank_message) {
   var myConn = new XHConn();
   if (!myConn) alert("XMLHTTP not available. Try a newer/better browser.");
   var fnWhenDone = function (oXML) { submitPoll_done(oXML.responseText,thank_message); };
   var str = "cmd=submit&pollId=" + p_id + "&answerId=" + p_answer;
   myConn.connect("/ngkids_mypage/servlet/PollService", "POST", str, fnWhenDone);
}

function submitPoll_done(responseText,thank_message) {

   UpdateFvDiv("poll", responseText,thank_message)

}

// ==========
// Functions for rating content

var ratingSet = false;
var rating = 0;
var tmpRating = 0;

function rating_rollover(oEvent) {
   var oDiv = (oEvent.target || oEvent.srcElement);
   var divXOff = oDiv.offsetLeft;
   if(BrowserDetect.browser == "Safari") {
           divXOff = divXOff + 45;
   }
   var relX = oEvent.clientX - divXOff;

   var oDebugX = document.getElementById("xval");
   var oDebugY = document.getElementById("yval");
   if (oDebugX != null) {
       oDebugX.innerHTML = oEvent.clientX;
   }
   if (oDebugY != null) {
       oDebugY.innerHTML = oEvent.clientY;
   }

   tmpRating = parseInt(relX / 16) + 1;

   var oDebugRating = document.getElementById("rating");
   if (oDebugRating != null) {
       oDebugRating.innerHTML = tmpRating;
   }

   switch (tmpRating) {
   case 1:
       oDiv.style.backgroundImage = "url(/staticfiles/NGS/NGKids/SiteAssets/img/RatingsBox_1.gif)";
       break;
   case 2:
       oDiv.style.backgroundImage = "url(/staticfiles/NGS/NGKids/SiteAssets/img/RatingsBox_2.gif)";
       break;
   case 3:
       oDiv.style.backgroundImage = "url(/staticfiles/NGS/NGKids/SiteAssets/img/RatingsBox_3.gif)";
       break;
   case 4:
       oDiv.style.backgroundImage = "url(/staticfiles/NGS/NGKids/SiteAssets/img/RatingsBox_4.gif)";
       break;
   case 5:
       oDiv.style.backgroundImage = "url(/staticfiles/NGS/NGKids/SiteAssets/img/RatingsBox_5.gif)";
       break;
   }
}

function rating_out(oEvent) {
   var oDiv = (oEvent.target || oEvent.srcElement);

   var oDebugX = document.getElementById("xval");
   var oDebugY = document.getElementById("yval");
   if (oDebugX != null) {
       oDebugX.innerHTML = 0;
   }
   if (oDebugY != null) {
       oDebugY.innerHTML = 0;
   }

   var oDebugRating = document.getElementById("rating");

   if (ratingSet == false) {
     oDiv.style.backgroundImage = "url(/staticfiles/NGS/NGKids/SiteAssets/img/RatingsBox_0.gif)";
     if (oDebugRating != null) {
         oDebugRating.innerHTML = 0;
     }
   }
   else {
       switch (rating) {
       case 1:
           oDiv.style.backgroundImage = "url(/staticfiles/NGS/NGKids/SiteAssets/img/RatingsBox_1.gif)";
           break;
       case 2:
           oDiv.style.backgroundImage = "url(/staticfiles/NGS/NGKids/SiteAssets/img/RatingsBox_2.gif)";
           break;
       case 3:
           oDiv.style.backgroundImage = "url(/staticfiles/NGS/NGKids/SiteAssets/img/RatingsBox_3.gif)";
           break;
       case 4:
           oDiv.style.backgroundImage = "url(/staticfiles/NGS/NGKids/SiteAssets/img/RatingsBox_4.gif)";
           break;
       case 5:
           oDiv.style.backgroundImage = "url(/staticfiles/NGS/NGKids/SiteAssets/img/RatingsBox_5.gif)";
           break;
       }

       if (oDebugRating != null) {
           oDebugRating.innerHTML = rating;
       }
   }
}

function rating_click(oEvent, c_id) {
   ratingSet = true;
   rating = tmpRating;
   rating_send(rating, c_id);
}

function rating_send(rating, c_id) {
   var myConn = new XHConn();
   if (!myConn) alert("XMLHTTP not available. Try a newer/better browser.");
   var fnWhenDone = function (oXML) { rating_done(oXML.responseText); };
   var ratingStr = "contentId=" + c_id + "&rating=" + rating;
   myConn.connect("/ngkids_mypage/servlet/RatingsService", "POST", ratingStr, fnWhenDone);
}

function rating_done(responseTxt) {
   // TODO: Should check response
/* For Debug
   oResultTxt = document.getElementById("rating_result");
   if (!oResultTxt) alert("Fubar!");
   oResultTxt.innerHTML = "Thank you for rating this content:";

   newP = document.createElement("p");
   newPTxt = document.createTextNode(responseTxt);
   newP.appendChild(newPTxt);
   oResultTxt.appendChild(newP);
*/
}

// ==========

function SendLink(url) {
//    window.open("/ngkids_mypage/SendLink.html","","height=285,width=440,location=no,menubar=no,resizable=no,status=no,toolbar=no");
//    window.open("/ngkids_mypage/servlet/SendToService?cmd=form&url=" + url,"","height=285,width=440,location=no,menubar=no,resizable=no,status=no,toolbar=no");
   window.open("/ngkids_mypage/SendLink.jsp?url=" + url,"","height=285,width=440,location=no,menubar=no,resizable=no,status=no,toolbar=no");
}

function link_send(url, from_addr, to_addr) {
   var myConn = new XHConn();
   if (!myConn) alert("XMLHTTP not available. Try a newer/better browser.");
   var fnWhenDone = function (oXML) { link_done(oXML.responseText); };
   var paramStr = "cmd=send&url=" + url + "&from=" + from_addr + "&to=" + to_addr;
   myConn.connect("/ngkids_mypage/servlet/SendToService", "POST", paramStr, fnWhenDone);
}

function link_done(responseText) {
   var regexp = new RegExp("^NACK:");
   if (result = regexp.exec(responseText) != null) {
       alert("Error sending link:\n" + responseText.slice(regexp.lastIndex));
   }
   else {
       alert("Link Sent!");
   }

   window.close();
}

function SendLinkEmail(url) {
   var form = document.forms["send_link"]
   if (form != null) {
       var from_email = form.from_email.value;
       var to_email = form.to_email.value
       var regexp = new RegExp(".+@.+\....*"); // Simplistic email address validation
       if (from_email == null || from_email.length == 0 || !regexp.test(from_email)) {
           alert("You must enter a valid email address for yourself.");
           form.from_email.focus();
           return false;
       }
       else if (to_email == null || to_email.length == 0 || !regexp.test(to_email)) {
           alert("You must enter a valid email address for your friend.");
           form.to_email.focus();
           return false;
       }
       else {
           link_send(url, from_email, to_email);
           return true;
       }
   }
}

// ==========
// Utility functions for communicating with the server
/*
function TestSend() {
   var dat = 5;
   var params = [["cmd", 1],["id", dat]];
   var callback = function (oXML) { TestSendDone(); };
   var callback_params = [dat];
   send_to_server(params, callback, callback_params);
}

function TestSendDone(str, params) {
   var str2 = str + "\n";
   for each (var p in params) {
       str2 += ", " + p;
   }
   alert("str2: " + str2);
}

function send_to_server(params, callback, callback_params) {
   var myConn = new XHConn();

   if (!myConn) {
       alert("XMLHTTP not available. Try a newer/better browser.");
       return;
   }

   var str = "";
   for (var i = 0; i < params.length; i++) {
       if (i > 0) {
           str += "&";
       }
       str += params[i][0] + "=" + params[i][1];
   }

   callback(str, callback_params);

//    var fnWhenDone = function (oXML) { submitPoll_done(oXML.responseText); };
//    var str = "cmd=submit&pollId=" + p_id + "&answerId=" + p_answer;
//    myConn.connect("servlet/PollService", "POST", str, fnWhenDone);
}
*/

// ==========

function UpdateDiv(id, content) {
   var oDiv = document.getElementById(id);
   if (!oDiv) {
       // Can't find the div so force a reload to get the update
       location.reload(true);
   }
   else {
       oDiv.innerHTML = content;
   }
}


function UpdateFvDiv(id, content,thank_message) {
   var oDiv = document.getElementById(id);
   if (!oDiv) {
       // Can't find the div so force a reload to get the update
       location.reload(true);
   }
   else {
       if (thank_message == null || thank_message.length == 0)
           {
 oDiv.innerHTML = "<div class ='poll' id ='poll_result'><br/><p>Thank you for answering the poll. </p><img alt='Thank you' src='/staticfiles/NGS/NGKids/SiteAssets/img/spacer.gif' border='0' height='60' width='67'><div class='poll_ftr'></div></div>";
           }
           else{
       oDiv.innerHTML = "<div class ='poll' id ='poll_result'><br/><p>"+thank_message+"</p><img alt='Thank you' src='/staticfiles/NGS/NGKids/SiteAssets/img/spacer.gif' border='0' height='60' width='67'><div class='poll_ftr'></div></div>";
           }

       // set the cookie
       poll_cookie_set('fav_poll_id', 'fav_poll_id', 1);
      

   }
}


// ==========
// Functions for handling cookies

function cookie_set(name, value, duration) {
   var expire = new Date();
   // -1 duration will have cookie expire immediately (delete cookie)
   // 0 duration will have cookie expire when browser is closed
   if (duration != 0) {
       expire.setDate(expire.getDate() + duration);
   }

   cookieStr = "" + name + "=" + value + ((duration != 0) ? "; expires=" + expire.toGMTString() : "") + "; path=/";

   document.cookie = cookieStr;
}

function cookie_get(name) {
   if (document.cookie.length > 0) {
       var cookie_vals = new Array();
       var nv = new Array();
       cookie_vals = document.cookie.split(';');
       for (i = 0; i < cookie_vals.length; i++) {
           nv = cookie_vals[i].split('=');
           // TODO: need to check length - make sure there are two elements
           if (trim(name) == trim(nv[0])) {
               return trim(nv[1]);
           }
       }
       return null;
   } else {
       return null;
   }
}

// Might not need this - use get
function cookie_is_set(name) {
   return (cookie_get(name) != null ? true: false);
}

function cookie_del(name) {
   if (cookie_is_set(name)) {
       cookie_set(name, "", -1);
   }
}

// ==========
//

function trim(str) {
   var t = str;
   t = t.replace(/^\s*/, "");
   t = t.replace(/\s*$/, "");
   return t;
}


// ==========
// Functions for handling cookies

function poll_cookie_set(name, value, duration) {
 
  var expire = new Date();
     // -1 duration will have cookie expire immediately (delete cookie)
     // 0 duration will have cookie expire when browser is closed
     if (duration != 0) {
         expire.setDate(expire.getDate() + duration);
     }
  
     cookieStr = "" + name + "=" + value + ((duration != 0) ? "; expires=" + expire.toGMTString() : "") + "; path=/";
  
   document.cookie = cookieStr;
   
}


function poll_cookie_get(name) {
  if (document.cookie.length > 0) {
      var cookie_vals = new Array();
      var nv = new Array();
      cookie_vals = document.cookie.split(';');
      for (i = 0; i < cookie_vals.length; i++) {
          nv = cookie_vals[i].split('=');
          // TODO: need to check length - make sure there are two elements
          if (trim(name) == trim(nv[0])) {
              return trim(nv[1]);
          }
      }
      return null;
  } else {
      return null;
  }
}


// ==========
// 
