var  imagePath = "/images/";

  // loadImg constructor
function loadImg(file) {
  this.file = file;
  return this;
}

  // toggleImg constructor
function toggleImg(defaultImg, hoverImg) {
  this.defaultImg = defaultImg;
  this.hoverImg = hoverImg;
  return this;
}


function openSlideshow(name) {
    name='http://www.wnyc.org/slideshows/' + name;
  window.open(name, 'slidepopup', 'width=600,height=675,resizeable=yes,toolbar=no,scrollbars=yes');
  return false;
}


  // preloadImgs definition
var preloadImgs = new Array(
  new loadImg("logo_otm_r.gif")
);

  // postloadImgs definition
var postloadImgs = new Array(
  new loadImg("button_search_r.gif"),
  new loadImg("button_subscribe_r.gif"),
  new loadImg("button_submit_r.gif"),
  new loadImg("button_cancel_r.gif"),
  new loadImg("button_sendEmail_r.gif")
);

  // toggleImgs definition.  use submit button css id as the array identifier when adding to array
var toggleImgs = new Array();
toggleImgs["advancedSubmit"] = toggleImgs["specificSubmit"] = toggleImgs["specificSubmit"] = new toggleImg("button_search_light.gif","button_search_r.gif");
toggleImgs["searchSubmit"] = new toggleImg("button_search.gif","button_search_r.gif");
toggleImgs["subscribeSubmit"] = new toggleImg("button_subscribe.gif","button_subscribe_r.gif");
toggleImgs["submitSubmit"] = new toggleImg("button_submit.gif","button_submit_r.gif");
toggleImgs["cancelSubmit"] = new toggleImg("button_cancel_light.gif","button_cancel_r.gif");
toggleImgs["sendSubmit"] = new toggleImg("button_sendEmail_light.gif","button_sendEmail_r.gif");


  // requires array parameter in expected format
function doLoadImgs(arrImgs) {
  for(var i=0; i < arrImgs.length; i++) {
    var img = new Image();
    img.src = imagePath + arrImgs[i]["file"];
  }
}

  // let addLoadEvent to do its thing
function doDoLoadImgs() {
  doLoadImgs(postloadImgs);
}

  // behaviors for all forms across all pages
function prepForms() {
  if (document.getElementById) {
    var submits = new Array();
    var searchLight = false;
    if (document.getElementById("login_email")) {
      var login_email = document.getElementById("login_email");
      login_email.onfocus = function() {
        if (this.value=='enter email address') {
          this.value='';
        }
      }
    }
    if (document.getElementById("searchAdvanced")) {
      submits[0] = document.getElementById("advancedSubmit");
      submits[1] = document.getElementById("specificSubmit");
      searchLight = true;
    }
    else if (document.getElementById("searchSimple") || document.getElementById("searchResults")) {
      submits[0] = document.getElementById("searchSubmit");
      searchLight = true;
    }
    else if (document.getElementById("search")) {
      submits[0] = document.getElementById("searchSubmit");
      if (document.getElementById("subscribe")) {
        submits[1] = document.getElementById("subscribeSubmit");
      }
      else if (document.getElementById("contactform")) {
        submits[1] = document.getElementById("submitSubmit");
      }
    }
    else if (document.getElementById("email")) {
      submits[0] = document.getElementById("sendSubmit");
      submits[1] = document.getElementById("cancelSubmit");
    }
    for (i=0; i<submits.length; i++) {
      submits[i].onmouseover = function() {
        this.src = imagePath + toggleImgs[this.getAttribute("id")]["hoverImg"];
      }
      submits[i].onmouseout = function() {
        if (this.getAttribute("id") == "searchSubmit" && searchLight) {
          this.src = imagePath + "button_search_light.gif";
        }
        else {
          this.src = imagePath + toggleImgs[this.getAttribute("id")]["defaultImg"];
        }
      }
    }
    return true;
  }
  return false;
}

  // load image(s) before window.onload
doLoadImgs(preloadImgs);

  // load image(s) upon window.onload
addLoadEvent(doDoLoadImgs);

  // prep forms upon window.onload
addLoadEvent(prepForms);


  // insert image
function insertImg(imgParent,imgName,imgWidth,imgHeight,imgAlt,createLink,linkRef,linkTitle) {
  var imgCanvas = document.getElementById(imgParent);
  var newImg = document.createElement("img");
  var imgSrc = imagePath + imgName;
  newImg.setAttribute("src",imgSrc);
  newImg.setAttribute("width",imgWidth);
  newImg.setAttribute("height",imgHeight);
  newImg.setAttribute("alt",imgAlt);
  if (createLink) {
    var newChild = document.createElement("a");
    newChild.setAttribute("href",linkRef);
    newChild.setAttribute("title",linkTitle);
    newChild.appendChild(newImg);
  }
  else {
    newChild = newImg;
  }
  if (imgCanvas.hasChildNodes) {
    for (i=0;i<imgCanvas.childNodes.length;i++) {
      if (imgCanvas.childNodes[i].nodeType == 1) {
        var oldChild = imgCanvas.childNodes[i];
        break;
      }
    }
  }
  if (oldChild) {
    imgCanvas.replaceChild(newChild,oldChild);
  }
  else {
    imgCanvas.appendChild(newChild);
  }
  return true;
}

  // insert logo
function insertLogo() {
  if (document.getElementById && document.createElement && document.getElementById("logo")) {
    insertImg("logo","logo_otm.gif","216","85","On The Media",true,"/","On The Media");
    return true;
  }
  return false;
}

  // update doc with printable images upon window.onload
// addLoadEvent(insertLogo);


function makeprintable() {
  logDebug('in makeprintable');
  var qstr=document.location.search.substring(1);
  if (qstr=='printable' || parseQueryString(qstr).printable) {
    var links=getElementsByTagAndClassName('link');
    forEach (links, function(link) {
      if (link.getAttribute('rel')=='stylesheet') {
        var media=link.getAttribute('media');
        if (media == 'screen' || media == 'print') {
          setNodeAttribute(link, 'href', '/includes/OTM-print.css');
        }
      }
    });
    logDebug("we are printable");
    insertLogo();
    return true;
  }
  logDebug("we are not printable");
  return false;
}

function openPrintWindow() {
  var newwin=window.open(document.URL+'?printable', "printWindow" + Math.floor(Math.random()*1000), 
        "status,menubar,height=500,width=600,scrollbars");
  withWindow(newwin, partial(addLoadEvent, function() {
      callLater(1, function() {
         newwin.print();
      });
  }));

}

var printmode=makeprintable()

var titleOverride = null;
var urlOverride = null;
var itemidOverride = null;

function postJSON(url, data, method) {
  if (isUndefinedOrNull(method)) {
     method='POST';
  }
  var req=getXMLHttpRequest();
  req.open(method, url, true);
  req.setRequestHeader('Content-Type', 'text/json; charset=utf-8');
  var payload=serializeJSON(data);
  var df=sendXMLHttpRequest(req, payload);
  return df;
}

function trimstring(s) {
  return s.replace(/\s*(.*)\s*/, "$1");
}

function form_to_obj(data) {
 var obj={};
 forEach(izip(data[0], data[1]), function(thing) {
    var k=thing[0];
    var v=thing[1];
    if (isUndefinedOrNull(v)) {
       v="";
    }
    obj[k]=v;
 });
 return obj;
}

function get_error_field(formid, fieldname) {
   var t= "error_"+fieldname+formid;
   if (! getElement(t)) {
     logDebug("not found: ", t);
   }
   return t;
}

function getEmailThisID() {
  return (window.clickID) ? window.clickID : 
    ((window.opener && window.opener.clickID) ? window.opener.clickID : null);
}

function send_email(formid, url, title, itemid) {
  logDebug("in send_email");  
  var data=formContents(formid);
  var formcode = formid.slice(9);
  var error_div = "emailthis_error"+formcode;
  var wrapper_div = "main"+formcode;
  var ind=findValue(data[0], 'addressees');
  data[1][ind] = filter(null, map(trimstring, filter(null, data[1][ind].split(/[,\s]+/))));
  itemid=(isUndefinedOrNull(itemid)) ? getEmailThisID() : itemid;
  if (itemid) {
     data[0].push('item_id');
     data[1].push(itemid);
  }
  logDebug("survived: ", data);
  var obj=form_to_obj(data);
  obj.url=url;
  obj.page_title=title;
  var df=postJSON('/api/emailthis/send', obj);
  df.addCallback(function(req) {
      $('main').innerHTML='<br /><div style="text-align:center">Your email has been sent.</div>';
    });
  df.addErrback(function(err) {
    var data;
    var head_check = err.req.getResponseHeader("Content-Type");
    if (head_check && head_check.match(/^text\/json(;.*)?$/)) {
        data = evalJSONRequest(err.req);
    } else {
        data={"top" : err.req.responseText};
    }
    //alert( err.number );
    switch(err.number) {
    case 400:
       var message="There was a problem submitting your email.";
       if (data.top) {
          message+="<br />"+data.top;
       }
       for (var field in data) {
        if (field != 'top') {
          var place=$(get_error_field(formcode, field));
          if (place) {
            
            var msg=data[field] || '';
        
            if (isArrayLike(msg)) {
              msg=reduce(function(x,y) {return x+"<br /> "+y;}, filter(null, msg));
            }
            place.innerHTML=msg;
          }
        }
       }
       $(error_div).innerHTML=message;
       break;
    default:
      $(error_div).innerHTML="<br /><div class='emailthis_notice'>There was a problem submitting your email. Please try again.</div>";
     }
   });
  return false;
}

function ET() {
  window.open('/emailthiswindow.html', 'emailthis', 'width=480,height=551,status=no,resizable=yes,toolbar=no,menubar=no');
  titleOverride = arguments[0] ? arguments[0] : null;
  urlOverride = arguments[1] ? arguments[1] : null;
  itemidOverride = arguments[2] ? arguments[2] : null;
  return false;
}

var ETMouseOver=function() { return true; }
var ETMouseOut=ETMouseOver;


function PT() {
  /* for legacy static pages only */
  window.print();
  return false;
}

var PTMouseOver=function() { return true; }
var PTMouseOut=PTMouseOver;

function ST() {
  var qs=queryString({'v': '4', 
                      'jump' : 'close', 
                      'url' : location.href, 
                      'title' : document.title});
  var delurl='http://del.icio.us/post?noui&' + qs;
  window.open(delurl, 'delicious', 'toolbar=no,width=700,height=400'); 
  return false;
}

var STMouseOver=function() {return true;}
var STMouseOut=STMouseOver;

var MP=ST;
var MPMouseOver=function() {return true;}
var MPMouseOut=MPMouseOver;

function adjust_nav_links() {
  var links=getElementsByTagAndClassName('li', null, 'nav');
  var uri=document.location.href;
  var hidelink=function(elem) {
    var anchors=getElementsByTagAndClassName('a', null, elem);
    if (anchors) {
       var a=anchors[0];
       if (a.href && uri==a.href) {
         var tmp=a.innerHTML;
         elem.innerHTML=tmp;
         return 1;
       }
    }
    return 0;
  };
  for (var i=0;i<links.length;i++){
    if (hidelink(links[i])) {
      break;
    }
  }
}

function openAudioPlayer(audiolink, playlistlink) {
   var hasRA=audiolink.match(/\.ra\b/i);
   var flashversion=deconcept.SWFObjectUtil.getPlayerVersion();
   if (hasRA || (flashversion['major'] < 7)) {
      return true;
   } else {
     window.open('/flashpop.html?playlist=' + encodeURIComponent(playlistlink),
                 'pop',
                 'width=392,height=312,scrollbars=no,toolbar=0,menubar=0,resizable=0,location=0,status=1');
     return false;
   }
}

function embedAudio(audiolink, playlistlink, playlink, place, embedlinkplace, id, downloadlink, playerWidth) {
   var hasRA=audiolink.match(/\.r[am]\b/i);
   var elem=$(place);
   var embedlinkelem=$(embedlinkplace);
   var flashversion=deconcept.SWFObjectUtil.getPlayerVersion();
   showElement(elem);
   showElement(embedlinkelem);
   if (hasRA || (flashversion['major'] < 7)) {
    var dlink = "";
        if(downloadlink) {
        dlink = '<li class="download"><a class="mp3down" href="'+ downloadlink +'">Download MP3</a></li></ul>';
    }
        elem.innerHTML = '<ul class="shortlinks"><li class="listen"><a class="listen" href="'+ audiolink +'">Listen</a></li>'+dlink+'</ul>';
   } else if (flashversion['major'] >= 7) {
   /* Random number to force cache for IE6+ caching wackiness */
   var randomnum=Math.floor(Math.random()*99999);
   var swfUrl='/flashplayer/mp3player.swf?nocache='+randomnum+'&file=' + playlink +'&displayheight=0&callback=analytics&popurl=/flashpop.html?playlist=/stream/xspf/'+id;
   var swfObj=new SWFObject(swfUrl, "Mp3 Player " + id, playerWidth, 19, 7, "#FFFFFF");
   swfObj.addParam("allowScriptAccess", "always");
   swfObj.addParam("wmode", "transparent");
   swfObj.write(place);
   var embedplace = "embedcontent" + id;
    if(downloadlink) {
       embedlinkelem.innerHTML = '<a style="color: #7a7a7a; font-size: 9px;" class="mp3downembed" href="'+downloadlink+'">Download MP3</a> | ';
     }
    embedlinkelem.innerHTML += '<a href="#" style="color: #7a7a7a; font-size: 9px;" onclick="loadEmbedForm(\''+embedplace+'\', \''+playlistlink+'\', \''+id+'\'); return false;">Embed HTML</a>';
   }
}

function loadEmbedForm(place, url, itemid) {
    if ($(place) && 
        $(place).innerHTML &&
        !($(place).innerHTML.match(/^\s*$/))) {
       $(place).innerHTML='';
       return;
    }
    var urlstart=document.location.protocol + '//' + document.location.host;
    var txt="<fieldset class=\"embedthis\" id=\"embedthis_wrapper"+itemid+"\">"
     + "<legend>Embed This Audio</legend>"
     + "<p>Copy and paste the HTML below to embed this audio onto your web page. "
     + "Find out more <a href=\"/audio_help.html#embed_help\">here</a>.</p>"
     + "<p>OTM audio player code:<br />"
     + "<textarea onclick=\"this.select();\" name=\"embedcode\" rows=\"6\">"
     + "<object width=\"350\" height=\"36\">"
     + "<param name=\"movie\" value=\""
     + urlstart 
     + "/flashplayer/mp3player.swf?config="
     + urlstart
     + "/flashplayer/config_share.xml&amp;file="
     + urlstart
     + url
     + "\"></param>"
     + "<param name=\"wmode\" value=\"transparent\"></param>"
     + "<embed type=\"application/x-shockwave-flash\" src=\"" 
     + urlstart 
     + "/flashplayer/mp3player.swf?config=" 
     + urlstart 
     + "/flashplayer/config_share.xml&amp;file="
     + urlstart 
     + url
     + "\" id=\"OTM_Mp3_Player_"
     + itemid
     + "\" name=\"OTM_Mp3_Player_"
     + itemid
     + "\" bgcolor=\"#FFFFFF\" "
     + "wmode=\"transparent\" height=\"36\" width=\"350\"></embed>"
     +"</object>"
     + "</textarea></p>"
     + "</fieldset>";
    $(place).innerHTML=txt;
}

function cookie(name,value, parent){
    this.name = name;
    this.value = value;
    this.parent=parent;
    this.attributes = new Array();
    this.expiresIn = function(days){
        expiration = new Date();
        expiration.setTime(expiration.getTime() + (days*86400000));
        this.attributes["expires"] = expiration.toGMTString();
    };
    this.set = function (){
        var cookiestr = this.name + "=" + escape(this.value);
        for(attr in this.attributes){
            cookiestr += "; " + attr;
            if(this.attributes[attr].length > 0) {
                cookiestr += "=" + this.attributes[attr];
            }
        }
        document.cookie=cookiestr;
    };
    this.erase = function() {
        this.expiresIn(-1);
        this.set();
        delete this.parent.cookies[this.name];
      };
}

function CookieJar() {
   this.cookies={};

   this.add=function (name,value) {
      var c=new cookie(name,value,this);
      this.cookies[name]=c;
      return c;
   };

   this.get=function(name) {
       for(var o in this.cookies) {
           if(o == name) {
               return this.cookies[o];
           }
       }
       return null;
   };

   this.del=function(name) {
       var c=this.get(name);
       if (c) {
         c.erase();
       }
   }

   var cstr=document.cookie;
   var spaces=/\s/gi;
   cstr=cstr.replace(spaces,'');
   while(cstr.length>0) {
       cequal=cstr.indexOf("=");
       if(cequal==-1) cequal=cstr.length;
       var name=cstr.substring(0,cequal);
       cstr=cstr.substring(cequal+1,cstr.length);
       cend=cstr.indexOf(";");
       if(cend==-1) { cend=cstr.length;}
       var value=unescape(cstr.substring(0,cend));
       cstr=cstr.substring(cend+1,cstr.length);
       this.add(name,value);
   }
}

var Cookies=new CookieJar();
