
// Firebug 
if (!window.console || !console.firebug) {
  var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml",
  "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
  window.console = {};
  for (var i = 0; i < names.length; ++i) window.console[names[i]] = function() {}
}

var currentMenu = -1;
var mouseOnMenu = 0;
var timerID = 0;

function rtrim(str) { return (str==null ? "" : str.replace(/( |\t|\n|\r)*$/m,"")); }
function ltrim(str) { return (str==null ? "" : str.replace(/^( |\t|\n|\r)*/m,"")); }
function trim(str) { return rtrim(ltrim(str)); }

var meteliloadfns = new Array();
function meteliPageOnLoad() {
  for (var i=0; i<meteliloadfns.length; i+=1) { eval(meteliloadfns[i]); } 
}
function addMeteliPageOnLoad(code) { meteliloadfns.push(code); }

//Meny login toggle
function togglePageLogin() { new Effect.toggle('pmm-form-login', 'blind',{duration:0.4}); new Effect.toggle('pmm-form-search', 'blind',{duration:0.4}); }
function showPageLogin() { if (elem("pmm-form-login").style.display == "none") togglePageLogin(); }
function hidePageLogin() { if (elem("pmm-forma-search").style.display != "none") togglePageLogin(); }

function openMenu(i) {
  document.getElementById("mmenu" + i).style.display = "block";
  if (currentMenu!= i) closeMenu();
  currentMenu = i;
  timerID = setTimeout("onTimer()",700);
  mouseOnMenu = 1;
}

function menuMouseOut() { 
  mouseOnMenu = 0; 
}

function menuMouseOver(menu) {
  if (currentMenu!=-1) {
	mouseOnMenu = 1; 
	clearTimeout(timerID);  
	timerID = setTimeout("onTimer()",700);
  }
}

function closeMenu() {
	if (currentMenu != -1) document.getElementById("mmenu" + currentMenu).style.display = "none";
  currentMenu = -1;
}

function onTimer() {
  if (!mouseOnMenu) closeMenu();
}

function launchRadioMetelinet(channel, user, check) {
 if (user<0) { // NOTE: open for everyone, so this is redundant now
   alert("Kirjaudu / rekisteröidy niin pääset heti kuuntelemaan!");
   return null;
 } else {
   var wnd = window.open("/redirect.php?http://www.tezoma.com/plusplayer.asp?request=player&customer=meteli&channel=" + channel + "&user=" + user + "&check=" + check, "tezomaplayer", "config='innerHeight=517,innerWidth=544,height=517,width=544,left=100,top=100,toolbar=no,menubar=no,scrollbars=no,resizable=no,location=no,directories=no,status=no'");
   wnd.focus();
   return wnd;
 }
}

function nemAddEventListener(elem, event, fn) {
  if (elem.addEventListener) {
    elem.addEventListener(event,fn, false)
  } else if (elem.attachEvent) {
    elem.attachEvent("on" + event, fn);
  } else {
    alert("Sorry, your browser is not supported");
  }
}

function nemFormatSqlDate(date) {
  if (!date) return "0000-00-00 00:00:00";
  var d = {
    yyyy: date.getFullYear(), mm: date.getMonth()+1, dd: date.getDate(), 
    hh: date.getHours(), min: date.getMinutes(), ss: date.getSeconds()
  };
  if (d.dd < 10) d.dd = "0" + d.dd;
  if (d.mm < 10) d.mm = "0" + d.mm; 
  if (d.hh < 10) d.hh = "0" + d.hh;
  if (d.min < 10) d.min = "0" + d.min;
  if (d.ss < 10) d.ss = "0" + d.ss; 
  return d.yyyy + "-" + d.mm + "-" + d.dd + " " + d.hh + ":" + d.min + ":" + d.ss;
}

function nemWeekOfYear(date) {
  var d = new Date(date);
  d.setDate(d.getDate() - (d.getDay() + 6) % 7 + 3);
  var val = d.valueOf();
  d.setMonth(0, 4);
  return Math.round((val - d.valueOf()) / (604800000)) + 1;
}

function nemFormatPrice(price) {
  return parseFloat(price).toFixed(2).replace(".", ",");
}

function elem(id) { return document.getElementById(id); }
function elemShowIf(id, condition) { elem(id).style.display = (condition ? "" : "none"); }
function toggleDisplay(id) { elem(id).style.display = (elem(id).style.display == "none" ? "" : "none"); }

function nemCheckEmail(email) {   
var emailregexp=/^[A-Za-z0-9_\/`{|}~=?^!#$%&'*+-][A-Za-z0-9_\/`{|}~=?^!#$%&'*+-.]{0,63}@\w+([\.-]?\w+)*(\.\w{1,8})+$/   
return emailregexp.test(email); }

function nemElementRect(elem) {
  var orgelem = elem;
  var x = 0;
  var y = 0;
  if (elem.offsetParent) {
   	while (elem.offsetParent) {
   	  x += elem.offsetLeft
   	  y += elem.offsetTop
   	  elem = elem.offsetParent;
    }
 } else if (elem.x) {
   x += elem.x;
   y += elem.y;
 }
 return {"top": y, "left": x, "bottom" : y+orgelem.offsetHeight, "right" : x+orgelem.offsetWidth};
}

function nemMorePopup(c,mode) {
  if (mode == 1){
    document.getElementById("morepopup" + c).style.display = "none";
    document.getElementById("morepopup2" + c).style.display = "";
  }
  if (mode == 2){
    document.getElementById("morepopup" + c).style.display = "";
    document.getElementById("morepopup2" + c).style.display = "none";
  }
  new Effect.toggle('zoneCode' + c, 'blind',{duration:0.5});
}

// Try was added because of a bug? in ff 1.5.0.9 where an object didn't have a constructor property
function nemIsArray(obj) {
  try {
    return (typeof obj == "object" &&  obj.constructor.toString().indexOf("Array") > -1)
  } catch (e) {}
  return false;
}

// TODO: hm.. I wouldn't trust this, dates for example is not included
function nemDeepCopy(obj) {
   var type = typeof obj;
   var newObj;
   if (type == "boolean") {
      newObj = (obj ? true : false);
   } else if (type == "function") {
      newObj = obj; // ?? 
   } else if (type == "number") { 
     newObj = new Number(obj) + 0;
   } else if (nemIsArray(obj)) {
     newObj = new Array();
     for(var i=0;i<obj.length;i++) newObj.push(nemDeepCopy(obj[i]));
   } else if (type == "object") {
      newObj = new Object();
      for (var i in obj) {
        newObj[i] = nemDeepCopy(obj[i]);
      }
   } else if (type == "string") {   
     newObj = new String(obj) + "";
   } else if (type == "undefined") {
     newObj = undefined;
   }
   return newObj;
}

// TODO: hm.. I wouldn't trust this, dates for example is not included
function nemEquals(obj1, obj2) {
   var i;
   if (typeof obj1 != typeof obj2) return false;
   var type = typeof obj1;
   if (type == "boolean" || type=="string" || type=="number") {
     return (obj1 == obj2 ? true : false);
   } else if (type == "function") {
      return false; // ?? 
   } else if (nemIsArray(obj1) && nemIsArray(obj2)) {
     if (obj1.length != obj2.length) return false;
     for (var i=0;i<obj1.length;i++) if (!nemEquals(obj1[i], obj2[i])) return false;
     return true;
   } else if (type == "object") {
      var items1 = [];
      var items2 = []
      for (i in obj1) items1.push(i);
      for (i in obj2) items2.push(i);
      if (!nemEquals(items1, items2)) return false;
      for (i in obj1) {
        if (!nemEquals(obj1[i],obj2[i])) return false
      }
      return true;
   } else if (type == "undefined") {
     return true;
   }
   alert("equals: unknown type");
   return false;
}


var event_listID = 0;
var last_event_listID = 0;
var event_list_timerID = 0;

function eventList(id, out) {
  event_listID = (out ? 0 : id);
  if (event_list_timerID != 0) clearTimeout(event_list_timerID);
  event_list_timerID = setTimeout(onEventListTimer, 80);
}

function onEventListTimer() {
  if (event_listID != last_event_listID) {
    if (last_event_listID) {
      elem("event-list-my-star-" + last_event_listID).src = "/img2/v5/events/star_l_" + (eventAdded(last_event_listID) ? 3 : 2) + "." + (meteli_user.is_ie6() ? "gif" : "png");
      if (!eventAdded(last_event_listID)) {
        if (meteli_user.is_ie7()) {
          elem("event-list-my-star-" + last_event_listID).style.display="none";
        } else {
          new Effect.Fade(elem("event-list-my-star-" + last_event_listID), {duration:0.2});
        }
      }
    }
    if (event_listID) {
      elem("event-list-my-star-" + event_listID).src = "/img2/v5/events/star_l_" + (eventAdded(event_listID) ? 4 : 2) + "." + (meteli_user.is_ie6() ? "gif" : "png");
      if (meteli_user.is_ie7()) {
        elem("event-list-my-star-" + event_listID).style.display="";
      } else {
        new Effect.Appear(elem("event-list-my-star-" + event_listID), {duration:0.6});
      }
    }
    last_event_listID = event_listID;
    event_list_timerID = 0;
  }
}

function eventAdded(id) { 
  return (elem("event-list-my-star-" + id).src.indexOf("star_l_2") > 0 ? 0 : 1);
}
function eventListToggle(id) {
  if (!meteli_user.is_logged_in()) {
    alert("Kirjaudu/rekisteröidy niin pääset muokkaamaan omaa keikkalistaasi.");
    return;
  }
  nemMyEdit("ev", id, (eventAdded(id) ? 0 : 1), eventListAddCallback);
}
function eventListAddCallback(data) {
  if (data) {
    if (data.add == 1) {
      elem("event-list-my-star-" + data.id).src = "/img2/v5/events/star_l_3." + (meteli_user.is_ie6() ? "gif" : "png");
      elem("event-list-my-star-" + data.id).setAttribute("title", "Oma keikka! Voit poistaa klikkaamalla.");
      if (meteli_user.is_ie7()) {
        elem("event-list-my-star-" + event_listID).style.display="";
      } else {
        new Effect.Appear(elem("event-list-my-star-" + data.id), {duration:0.5, to:0.8});
      }
    } else {
      elem("event-list-my-star-" + data.id).src = "/img2/v5/events/star_l_2." + (meteli_user.is_ie6() ? "gif" : "png");
      elem("event-list-my-star-" + data.id).setAttribute("title", "Lisää omiin keikkoihin.");
      if (meteli_user.is_ie7()) {
        elem("event-list-my-star-" + event_listID).style.display="none";
      } else {
        new Effect.Fade(elem("event-list-my-star-" + data.id), {duration:2});
      }
    }
  }
}

function nemMyEdit(type, id, add, callback) {
  nemJSONRequest("/tapahtumat", {my_edit: id, type: type, add: (add ? 1 : 0) } , callback);
}

function nemJSONRequest(url, object, callback, responseIsHTML) {

  // From jibbering.com 
  var xmlhttp=false;
  /*@cc_on @*/
  /*@if (@_jscript_version >= 5)
  // JScript gives us Conditional compilation, we can cope with old IE versions.
  // and security blocked creation of the objects.
  try {
     xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
    try {
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (E) {
      xmlhttp = false;
    }
  }
  @end @*/
  if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
    xmlhttp = new XMLHttpRequest();
  }

  xmlhttp.open("POST", url, true);
  //xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded;charset=UTF-8');
  xmlhttp.setRequestHeader('Content-Type','text/plain');  
  
  if (responseIsHTML && responseIsHTML == 1) {
    xmlhttp.onreadystatechange=function() {
      if (xmlhttp.readyState==4) {
        callback(xmlhttp.responseText);
      }
    }    
  } else {
    xmlhttp.onreadystatechange=function() {
      if (xmlhttp.readyState==4) {
        var responseObject = null;
        try {
          var responseObject = JSON.parse(xmlhttp.responseText);
        } catch(e) {
          // console.log("Error in xmlhttp");
        }
        callback(responseObject);
      }
    }
  }

  xmlhttp.send(JSON.stringify(object));

}

/*
Copyright (c) 2005 JSON.org

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The Software shall be used for Good, not Evil.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/

var JSON = {
    org: 'http://www.JSON.org',
    copyright: '(c)2005 JSON.org',
    license: 'http://www.crockford.com/JSON/license.html',
    stringify: function(arg) {
        var c; var i; var l; var s = ''; var v;
        switch (typeof arg) {
        case 'object':
            if (arg) {
                if (arg.constructor == Array) {
                    for (i = 0; i < arg.length; ++i) {
                        v = this.stringify(arg[i]);
                        if (s) {
                            s += ',';
                        }
                        s += v;
                    }
                    return '[' + s + ']';
                } else if (typeof arg.toString != 'undefined') {
                    for (i in arg) {
                        v = arg[i];
                        if (typeof v != 'undefined' && typeof v != 'function') {
                            v = this.stringify(v);
                            if (s) {
                                s += ',';
                            }
                            s += this.stringify(i) + ':' + v;
                        }
                    }
                    return '{' + s + '}';
                }
            }
            return 'null';
        case 'number':
            return isFinite(arg) ? String(arg) : 'null';
        case 'string':
            l = arg.length;
            s = '"';
            for (i = 0; i < l; i += 1) {
                c = arg.charAt(i);
                if (c == "\u20AC") { // Fix for euro character
                  s += String.fromCharCode(128);
                } else if (c >= ' ') {
                    if (c == '\\' || c == '"') {
                        s += '\\';
                    }
                    s += c;
                } else {
                    switch (c) {
                        case '\b':
                            s += '\\b';
                            break;
                        case '\f':
                            s += '\\f';
                            break;
                        case '\n':
                            s += '\\n';
                            break;
                        case '\r':
                            s += '\\r';
                            break;
                        case '\t':
                            s += '\\t';
                            break;
                        default:
                            c = c.charCodeAt();
                            s += '\\u00' + Math.floor(c / 16).toString(16) +
                                (c % 16).toString(16);
                    }
                }
            }
            return s + '"';
        case 'boolean':
            return String(arg);
        default:
            return 'null';
        }
    },
    parse: function (text) {
        var at = 0;
        var ch = ' ';

        function error(m) {
            throw {
                name: 'JSONError',
                message: m,
                at: at - 1,
                text: text
            };
        }

        function next() {
            ch = text.charAt(at);
            at += 1;
            return ch;
        }

        function white() {
            while (ch) {
                if (ch <= ' ') {
                    next();
                } else if (ch == '/') {
                    switch (next()) {
                        case '/':
                            while (next() && ch != '\n' && ch != '\r') {}
                            break;
                        case '*':
                            next();
                            for (;;) {
                                if (ch) {
                                    if (ch == '*') {
                                        if (next() == '/') {
                                            next();
                                            break;
                                        }
                                    } else {
                                        next();
                                    }
                                } else {
                                    error("Unterminated comment");
                                }
                            }
                            break;
                        default:
                            error("Syntax error");
                    }
                } else {
                    break;
                }
            }
        }

        function string() {
            var i, s = '', t, u;

            if (ch == '"') {
outer:          while (next()) {
                    if (ch == '"') {
                        next();
                        return s;
                    } else if (ch == '\\') {
                        switch (next()) {
                        case 'b':
                            s += '\b';
                            break;
                        case 'f':
                            s += '\f';
                            break;
                        case 'n':
                            s += '\n';
                            break;
                        case 'r':
                            s += '\r';
                            break;
                        case 't':
                            s += '\t';
                            break;
                        case 'u':
                            u = 0;
                            for (i = 0; i < 4; i += 1) {
                                t = parseInt(next(), 16);
                                if (!isFinite(t)) {
                                    break outer;
                                }
                                u = u * 16 + t;
                            }
                            s += String.fromCharCode(u);
                            break;
                        default:
                            s += ch;
                        }
                    } else {
                        s += ch;
                    }
                }
            }
            error("Bad string");
            return null;
        }

        function array() {
            var a = [];

            if (ch == '[') {
                next();
                white();
                if (ch == ']') {
                    next();
                    return a;
                }
                while (ch) {
                    a.push(value());
                    white();
                    if (ch == ']') {
                        next();
                        return a;
                    } else if (ch != ',') {
                        break;
                    }
                    next();
                    white();
                }
            }
            error("Bad array");
            return null;
        }

        function object() {
            var k, o = {};

            if (ch == '{') {
                next();
                white();
                if (ch == '}') {
                    next();
                    return o;
                }
                while (ch) {
                    k = string();
                    white();
                    if (ch != ':') {
                        break;
                    }
                    next();
                    o[k] = value();
                    white();
                    if (ch == '}') {
                        next();
                        return o;
                    } else if (ch != ',') {
                        break;
                    }
                    next();
                    white();
                }
            }
            error("Bad object");
            return null;
        }

        function number() {
            var n = '', v;

            if (ch == '-') {
                n = '-';
                next();
            }
            while (ch >= '0' && ch <= '9') {
                n += ch;
                next();
            }
            if (ch == '.') {
                n += '.';
                while (next() && ch >= '0' && ch <= '9') {
                    n += ch;
                }
            }
            v = +n;
            if (!isFinite(v)) {
                error("Bad number");
            } else {
                return v;
            }
            return null;
        }

        function word() {
            switch (ch) {
                case 't':
                    if (next() == 'r' && next() == 'u' && next() == 'e') {
                        next();
                        return true;
                    }
                    break;
                case 'f':
                    if (next() == 'a' && next() == 'l' && next() == 's' &&
                            next() == 'e') {
                        next();
                        return false;
                    }
                    break;
                case 'n':
                    if (next() == 'u' && next() == 'l' && next() == 'l') {
                        next();
                        return null;
                    }
                    break;
            }
            error("Syntax error");
            return null;
        }

        function value() {
            white();
            switch (ch) {
                case '{':
                    return object();
                case '[':
                    return array();
                case '"':
                    return string();
                case '-':
                    return number();
                default:
                    return ch >= '0' && ch <= '9' ? number() : word();
            }
        }

        return value();
    }
};

/* SWFObject v2.1 <http://code.google.com/p/swfobject/>
  Copyright (c) 2007-2008 Geoff Stearns, Michael Williams, and Bobby van der Sluis
  This software is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
*/
var swfobject=function(){var b="undefined",Q="object",n="Shockwave Flash",p="ShockwaveFlash.ShockwaveFlash",P="application/x-shockwave-flash",m="SWFObjectExprInst",j=window,K=document,T=navigator,o=[],N=[],i=[],d=[],J,Z=null,M=null,l=null,e=false,A=false;var h=function(){var v=typeof K.getElementById!=b&&typeof K.getElementsByTagName!=b&&typeof K.createElement!=b,AC=[0,0,0],x=null;if(typeof T.plugins!=b&&typeof T.plugins[n]==Q){x=T.plugins[n].description;if(x&&!(typeof T.mimeTypes!=b&&T.mimeTypes[P]&&!T.mimeTypes[P].enabledPlugin)){x=x.replace(/^.*\s+(\S+\s+\S+$)/,"$1");AC[0]=parseInt(x.replace(/^(.*)\..*$/,"$1"),10);AC[1]=parseInt(x.replace(/^.*\.(.*)\s.*$/,"$1"),10);AC[2]=/r/.test(x)?parseInt(x.replace(/^.*r(.*)$/,"$1"),10):0}}else{if(typeof j.ActiveXObject!=b){var y=null,AB=false;try{y=new ActiveXObject(p+".7")}catch(t){try{y=new ActiveXObject(p+".6");AC=[6,0,21];y.AllowScriptAccess="always"}catch(t){if(AC[0]==6){AB=true}}if(!AB){try{y=new ActiveXObject(p)}catch(t){}}}if(!AB&&y){try{x=y.GetVariable("$version");if(x){x=x.split(" ")[1].split(",");AC=[parseInt(x[0],10),parseInt(x[1],10),parseInt(x[2],10)]}}catch(t){}}}}var AD=T.userAgent.toLowerCase(),r=T.platform.toLowerCase(),AA=/webkit/.test(AD)?parseFloat(AD.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,q=false,z=r?/win/.test(r):/win/.test(AD),w=r?/mac/.test(r):/mac/.test(AD);/*@cc_on q=true;@if(@_win32)z=true;@elif(@_mac)w=true;@end@*/return{w3cdom:v,pv:AC,webkit:AA,ie:q,win:z,mac:w}}();var L=function(){if(!h.w3cdom){return }f(H);if(h.ie&&h.win){try{K.write("<script id=__ie_ondomload defer=true src=//:><\/script>");J=C("__ie_ondomload");if(J){I(J,"onreadystatechange",S)}}catch(q){}}if(h.webkit&&typeof K.readyState!=b){Z=setInterval(function(){if(/loaded|complete/.test(K.readyState)){E()}},10)}if(typeof K.addEventListener!=b){K.addEventListener("DOMContentLoaded",E,null)}R(E)}();function S(){if(J.readyState=="complete"){J.parentNode.removeChild(J);E()}}function E(){if(e){return }if(h.ie&&h.win){var v=a("span");try{var u=K.getElementsByTagName("body")[0].appendChild(v);u.parentNode.removeChild(u)}catch(w){return }}e=true;if(Z){clearInterval(Z);Z=null}var q=o.length;for(var r=0;r<q;r++){o[r]()}}function f(q){if(e){q()}else{o[o.length]=q}}function R(r){if(typeof j.addEventListener!=b){j.addEventListener("load",r,false)}else{if(typeof K.addEventListener!=b){K.addEventListener("load",r,false)}else{if(typeof j.attachEvent!=b){I(j,"onload",r)}else{if(typeof j.onload=="function"){var q=j.onload;j.onload=function(){q();r()}}else{j.onload=r}}}}}function H(){var t=N.length;for(var q=0;q<t;q++){var u=N[q].id;if(h.pv[0]>0){var r=C(u);if(r){N[q].width=r.getAttribute("width")?r.getAttribute("width"):"0";N[q].height=r.getAttribute("height")?r.getAttribute("height"):"0";if(c(N[q].swfVersion)){if(h.webkit&&h.webkit<312){Y(r)}W(u,true)}else{if(N[q].expressInstall&&!A&&c("6.0.65")&&(h.win||h.mac)){k(N[q])}else{O(r)}}}}else{W(u,true)}}}function Y(t){var q=t.getElementsByTagName(Q)[0];if(q){var w=a("embed"),y=q.attributes;if(y){var v=y.length;for(var u=0;u<v;u++){if(y[u].nodeName=="DATA"){w.setAttribute("src",y[u].nodeValue)}else{w.setAttribute(y[u].nodeName,y[u].nodeValue)}}}var x=q.childNodes;if(x){var z=x.length;for(var r=0;r<z;r++){if(x[r].nodeType==1&&x[r].nodeName=="PARAM"){w.setAttribute(x[r].getAttribute("name"),x[r].getAttribute("value"))}}}t.parentNode.replaceChild(w,t)}}function k(w){A=true;var u=C(w.id);if(u){if(w.altContentId){var y=C(w.altContentId);if(y){M=y;l=w.altContentId}}else{M=G(u)}if(!(/%$/.test(w.width))&&parseInt(w.width,10)<310){w.width="310"}if(!(/%$/.test(w.height))&&parseInt(w.height,10)<137){w.height="137"}K.title=K.title.slice(0,47)+" - Flash Player Installation";var z=h.ie&&h.win?"ActiveX":"PlugIn",q=K.title,r="MMredirectURL="+j.location+"&MMplayerType="+z+"&MMdoctitle="+q,x=w.id;if(h.ie&&h.win&&u.readyState!=4){var t=a("div");x+="SWFObjectNew";t.setAttribute("id",x);u.parentNode.insertBefore(t,u);u.style.display="none";var v=function(){u.parentNode.removeChild(u)};I(j,"onload",v)}U({data:w.expressInstall,id:m,width:w.width,height:w.height},{flashvars:r},x)}}function O(t){if(h.ie&&h.win&&t.readyState!=4){var r=a("div");t.parentNode.insertBefore(r,t);r.parentNode.replaceChild(G(t),r);t.style.display="none";var q=function(){t.parentNode.removeChild(t)};I(j,"onload",q)}else{t.parentNode.replaceChild(G(t),t)}}function G(v){var u=a("div");if(h.win&&h.ie){u.innerHTML=v.innerHTML}else{var r=v.getElementsByTagName(Q)[0];if(r){var w=r.childNodes;if(w){var q=w.length;for(var t=0;t<q;t++){if(!(w[t].nodeType==1&&w[t].nodeName=="PARAM")&&!(w[t].nodeType==8)){u.appendChild(w[t].cloneNode(true))}}}}}return u}function U(AG,AE,t){var q,v=C(t);if(v){if(typeof AG.id==b){AG.id=t}if(h.ie&&h.win){var AF="";for(var AB in AG){if(AG[AB]!=Object.prototype[AB]){if(AB.toLowerCase()=="data"){AE.movie=AG[AB]}else{if(AB.toLowerCase()=="styleclass"){AF+=' class="'+AG[AB]+'"'}else{if(AB.toLowerCase()!="classid"){AF+=" "+AB+'="'+AG[AB]+'"'}}}}}var AD="";for(var AA in AE){if(AE[AA]!=Object.prototype[AA]){AD+='<param name="'+AA+'" value="'+AE[AA]+'" />'}}v.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+AF+">"+AD+"</object>";i[i.length]=AG.id;q=C(AG.id)}else{if(h.webkit&&h.webkit<312){var AC=a("embed");AC.setAttribute("type",P);for(var z in AG){if(AG[z]!=Object.prototype[z]){if(z.toLowerCase()=="data"){AC.setAttribute("src",AG[z])}else{if(z.toLowerCase()=="styleclass"){AC.setAttribute("class",AG[z])}else{if(z.toLowerCase()!="classid"){AC.setAttribute(z,AG[z])}}}}}for(var y in AE){if(AE[y]!=Object.prototype[y]){if(y.toLowerCase()!="movie"){AC.setAttribute(y,AE[y])}}}v.parentNode.replaceChild(AC,v);q=AC}else{var u=a(Q);u.setAttribute("type",P);for(var x in AG){if(AG[x]!=Object.prototype[x]){if(x.toLowerCase()=="styleclass"){u.setAttribute("class",AG[x])}else{if(x.toLowerCase()!="classid"){u.setAttribute(x,AG[x])}}}}for(var w in AE){if(AE[w]!=Object.prototype[w]&&w.toLowerCase()!="movie"){F(u,w,AE[w])}}v.parentNode.replaceChild(u,v);q=u}}}return q}function F(t,q,r){var u=a("param");u.setAttribute("name",q);u.setAttribute("value",r);t.appendChild(u)}function X(r){var q=C(r);if(q&&(q.nodeName=="OBJECT"||q.nodeName=="EMBED")){if(h.ie&&h.win){if(q.readyState==4){B(r)}else{j.attachEvent("onload",function(){B(r)})}}else{q.parentNode.removeChild(q)}}}function B(t){var r=C(t);if(r){for(var q in r){if(typeof r[q]=="function"){r[q]=null}}r.parentNode.removeChild(r)}}function C(t){var q=null;try{q=K.getElementById(t)}catch(r){}return q}function a(q){return K.createElement(q)}function I(t,q,r){t.attachEvent(q,r);d[d.length]=[t,q,r]}function c(t){var r=h.pv,q=t.split(".");q[0]=parseInt(q[0],10);q[1]=parseInt(q[1],10)||0;q[2]=parseInt(q[2],10)||0;return(r[0]>q[0]||(r[0]==q[0]&&r[1]>q[1])||(r[0]==q[0]&&r[1]==q[1]&&r[2]>=q[2]))?true:false}function V(v,r){if(h.ie&&h.mac){return }var u=K.getElementsByTagName("head")[0],t=a("style");t.setAttribute("type","text/css");t.setAttribute("media","screen");if(!(h.ie&&h.win)&&typeof K.createTextNode!=b){t.appendChild(K.createTextNode(v+" {"+r+"}"))}u.appendChild(t);if(h.ie&&h.win&&typeof K.styleSheets!=b&&K.styleSheets.length>0){var q=K.styleSheets[K.styleSheets.length-1];if(typeof q.addRule==Q){q.addRule(v,r)}}}function W(t,q){var r=q?"visible":"hidden";if(e&&C(t)){C(t).style.visibility=r}else{V("#"+t,"visibility:"+r)}}function g(s){var r=/[\\\"<>\.;]/;var q=r.exec(s)!=null;return q?encodeURIComponent(s):s}var D=function(){if(h.ie&&h.win){window.attachEvent("onunload",function(){var w=d.length;for(var v=0;v<w;v++){d[v][0].detachEvent(d[v][1],d[v][2])}var t=i.length;for(var u=0;u<t;u++){X(i[u])}for(var r in h){h[r]=null}h=null;for(var q in swfobject){swfobject[q]=null}swfobject=null})}}();return{registerObject:function(u,q,t){if(!h.w3cdom||!u||!q){return }var r={};r.id=u;r.swfVersion=q;r.expressInstall=t?t:false;N[N.length]=r;W(u,false)},getObjectById:function(v){var q=null;if(h.w3cdom){var t=C(v);if(t){var u=t.getElementsByTagName(Q)[0];if(!u||(u&&typeof t.SetVariable!=b)){q=t}else{if(typeof u.SetVariable!=b){q=u}}}}return q},embedSWF:function(x,AE,AB,AD,q,w,r,z,AC){if(!h.w3cdom||!x||!AE||!AB||!AD||!q){return }AB+="";AD+="";if(c(q)){W(AE,false);var AA={};if(AC&&typeof AC===Q){for(var v in AC){if(AC[v]!=Object.prototype[v]){AA[v]=AC[v]}}}AA.data=x;AA.width=AB;AA.height=AD;var y={};if(z&&typeof z===Q){for(var u in z){if(z[u]!=Object.prototype[u]){y[u]=z[u]}}}if(r&&typeof r===Q){for(var t in r){if(r[t]!=Object.prototype[t]){if(typeof y.flashvars!=b){y.flashvars+="&"+t+"="+r[t]}else{y.flashvars=t+"="+r[t]}}}}f(function(){U(AA,y,AE);if(AA.id==AE){W(AE,true)}})}else{if(w&&!A&&c("6.0.65")&&(h.win||h.mac)){A=true;W(AE,false);f(function(){var AF={};AF.id=AF.altContentId=AE;AF.width=AB;AF.height=AD;AF.expressInstall=w;k(AF)})}}},getFlashPlayerVersion:function(){return{major:h.pv[0],minor:h.pv[1],release:h.pv[2]}},hasFlashPlayerVersion:c,createSWF:function(t,r,q){if(h.w3cdom){return U(t,r,q)}else{return undefined}},removeSWF:function(q){if(h.w3cdom){X(q)}},createCSS:function(r,q){if(h.w3cdom){V(r,q)}},addDomLoadEvent:f,addLoadEvent:R,getQueryParamValue:function(v){var u=K.location.search||K.location.hash;if(v==null){return g(u)}if(u){var t=u.substring(1).split("&");for(var r=0;r<t.length;r++){if(t[r].substring(0,t[r].indexOf("="))==v){return g(t[r].substring((t[r].indexOf("=")+1)))}}}return""},expressInstallCallback:function(){if(A&&M){var q=C(m);if(q){q.parentNode.replaceChild(M,q);if(l){W(l,true);if(h.ie&&h.win){M.style.display="block"}}M=null;l=null;A=false}}}}}();

var nemplayer = {
  active: 0, playlist: {}, swf: 0, position: 0, duration: 0, state: 0,
  last_time_state: -1, last_text_state: -1,
  
  trackChangeListener: function (download_trackID) {}, // override
  
  play: function(params) {
    
    if (!swfobject.hasFlashPlayerVersion("9.0.115")) {
      alert("Esikuuntelu vaatii vähintään Flash Player versio 9 (kts. www.adobe.com).");
    }  
    
    if (nemplayer.active && params.substr(0,2)=="DT") {
      for(var i=0;i<nemplayer.playlist.list.length;i++) {
        if (nemplayer.playlist.list[i].download_trackID == parseInt(params.substr(2))) {
          nemplayer.swf.sendEvent("ITEM", i);
          return;
        }
      }
    }
    nemJSONRequest(document.location.protocol + "//" + document.location.host + "/downloads/playlist", params, nemplayer._play2);
  },
  _play2: function(data) {
    if (!data && !data) return;
    if (data.status == "preview_not_available") { 
      alert("Esikuuntelu ei ole mahdollinen.");
      return;
    }
    nemplayer.playlist = data;
    if (nemplayer.swf == 0) {
      var flashvars = {autostart:"false", repeat: "list", shuffle: "false"}
      var params = { allowfullscreen:"true", allowscriptaccess:"always"}
      var attributes = { id:"nemplayer-swf", name:"nemplayer-swf" }
      swfobject.embedSWF("/js/apps/mediaplayer4.2/player.swf", "nemplayer-container", "1", "1", "9.0.115", false, flashvars, params, attributes);
      nemplayer.swf = elem("nemplayer-swf");
    } else {
      nemplayer._play3();
    }
  }, 
  _play3: function() {
    var player_list = [];
    for(var i=0;i<nemplayer.playlist.list.length;i++) player_list.push({type:"sound", file: nemplayer.playlist.list[i].file});  
    nemplayer.swf.sendEvent("LOAD", player_list);
    nemplayer.swf.sendEvent("ITEM", nemplayer.playlist.start_track);
    nemplayer.swf.sendEvent("PLAY", true);
    $("nemplayer").style.display = "block";
    //$("nemplayer-text").innerHTML = "";
    if (!nemplayer.active) {
      $("nemplayer-div").hide();
      new Effect.Appear($("nemplayer-div"), {queue:"end", duration:0.5});
    }
    nemplayer.active = 1;
    setTimeout(nemplayer.updateUI, 50);
  },

  updateUI: function() {
    var current_track = nemplayer.swf.getConfig().item;
    var item = nemplayer.playlist.list[current_track];
    var show_description = (new Date() % 8000 > 6000 && nemplayer.playlist.description != "");
    
    var new_text_state = item.download_trackID + " " + show_description;
    if (new_text_state != nemplayer.last_text_state) {
      
      setTimeout(function() {nemplayer.trackChangeListener(item.download_trackID)}, 10);
      $("nemplayer-image").src = item.image;
      $("nemplayer-track").innerHTML = "<b>" + (current_track+1) + "/" + nemplayer.playlist.list.length  + "</b> " + item.track_name;
      var text = (show_description ? nemplayer.playlist.description : item.album_name + '<div style="font-variant:small-caps">' + item.artist_name + "</div>"); 
      $("nemplayer-title").childNodes[0].innerHTML = text;
      nemplayer.last_text_state = new_text_state;
    }
    
    var new_time_state = nemplayer.state + parseInt(nemplayer.position) + parseInt(nemplayer.duration);
    if (new_time_state = nemplayer.last_time_state) {
      if (nemplayer.state == "playing") {
        $("nemplayer-time").innerHTML =  nemplayer._formatTime(nemplayer.position) + "/" + nemplayer._formatTime(nemplayer.duration);
      } else {
        $("nemplayer-time").innerHTML = "Lataa..."; // buffering, paused, completed, idle
      }
      nemplayer.last_time_state = new_time_state;
    }
    setTimeout(nemplayer.updateUI, 100);
  },
  
  _formatTime: function(sec) { sec = parseInt(sec); return Math.floor(sec/60) + ":" + (sec % 60 < 10 ? "0" : "") + (sec % 60) },
  
  onNext:function() { nemplayer.swf.sendEvent("NEXT", true); },
  onPrev:function() { nemplayer.swf.sendEvent("PREV", true); },
  
  onClose: function(dont_hide) {
    setTimeout(function() {nemplayer.trackChangeListener(0);}, 10);
    nemplayer.swf.sendEvent("STOP", true);
    nemplayer.active = 0;
    if (!dont_hide) {
      new Effect.Fade($("nemplayer-div"), {queue:"end", duration:0.3});
    } 
  },
  
  swfOnTime: function(ev) {
    nemplayer.position = ev.position;
    nemplayer.duration = ev.duration;
  },
  swfOnState: function(ev) {
    nemplayer.state = ev.newstate.toLowerCase();
  },
  
  onShowAlbum: function(ev) {
    document.location = nemplayer.playlist.list[nemplayer.swf.getConfig().item].album_url;
  },
  
  onBuy:  function(ev) {
    var item = nemplayer.playlist.list[nemplayer.swf.getConfig().item];
    shop.addAlbum(item.download_albumID);
  }
  
}
function playerReady() {
  //nemplayer.swf.addControllerListener("ITEM","pplayer.swfOnControllerItem"); 
  nemplayer.swf.addModelListener("TIME","nemplayer.swfOnTime");
  nemplayer.swf.addModelListener("STATE","nemplayer.swfOnState"); 
  nemplayer._play3();
}

var shop = {
  product_codes: {album: 1000, track: 1001},
  popup: {timerID:0, state:0, next_state:0}, // 0 off, 1 on
  showBar: function() {new Effect.SlideDown(elem("shop-bar"), {duration:0.8})}, 
  hideBar: function() {new Effect.SlideUp(elem("shop-bar"), {duration:0.8})},
  data: {}, 
  addTrack: function(id) {
    console.log(id);
    console.log(shop.data);
    if (shop.data.active) {
      for(var i=0;i<shop.data.products.length;i++) {
        if (shop.data.products[i].product_codeID == shop.product_codes.track && shop.data.products[i].download_trackID == id) {
          shop.showCueMessage("Kappale löytyy jo ostoskoristasi.");return;
        } 
      }
    }
    nemJSONRequest("/shop/json", {action: "add_track", id: id}, function(data) {shop.requestCallback("add_track", data);});
  },
  addAlbum: function(id) {
    if (shop.data.active) {
      for(var i=0;i<shop.data.products.length;i++) {
        if (shop.data.products[i].product_codeID == shop.product_codes.album && shop.data.products[i].download_albumID == id) {
          shop.showCueMessage("Levy löytyy jo ostoskoristasi.");return;
        } 
      }
    }
    nemJSONRequest("/shop/json", {action: "add_album", id: id}, function(data) {shop.requestCallback("add_album", data);});
  },
  addGiftCertificate: function(giftData) { // GIFT CERTIFICATE
	nemJSONRequest("/shop/json", {action: "add_gift_certificate", data: giftData}, function(data) {shop.requestCallback("add_gift_certificate", data);});
  },
  
  doRecommendation: function(id, code) {
      nemJSONRequest("/shop/json", {action: "recommendation", id: id, code: code}, function(data) {shop.requestCallback("add_album", data);});  
  },
  
  showPopup:  function() {
  },
  
  removeItem: function(opID) {
    nemJSONRequest("/shop/json", {action: "remove_products", products: [opID]}, function(data) {shop.requestCallback("remove_products", data);});
  },
  
  onMouse: function(type, event) {
    switch(type) {
    case "cart-over":
      shop.popup.next_state = 1;
      if (shop.popup.timerID) clearTimeout(shop.popup.timerID);
      shop.popup.timerID = setTimeout(shop.onCartPopupTimer, 200);
      break;
    case "cart-out":
      shop.popup.next_state = 0;
      if (shop.popup.timerID) clearTimeout(shop.popup.timerID);
      shop.popup.timerID = setTimeout(shop.onCartPopupTimer, 600);
      break;
    }
  },

  showCart: function(on) {
    if (on == "toggle") on = (shop.popup.state ? 0 : 1);
    
    if (on)  shop.refreshPopup();
    elem("shop-bar-popup").style.display = (on ? "" : "none");
    shop.popup.next_state = on;
    shop.popup.state = on;
  },
   
  onCartPopupTimer: function() {
    if (shop.popup.next_state == 1 && shop.popup.state == 0) shop.showCart(1);
    if (shop.popup.next_state == 0 && shop.popup.state == 1) shop.showCart(0);
    shop.popup.state = shop.popup.next_state;
    shop.popup.timerID = 0;
  },
  
  requestCallback: function (action, data) {
    
    var old_data = nemDeepCopy(shop.data);
    if (!data) { alert("Toiminto epäonnistui. Kokeile uudestaan."); return; }
    if (data.status != "ok" && data.message == "not yet released") { alert("Levyä ei ole julkaistu vielä."); return; }
    if (data.status != "ok" && data.message == "not available as track") { alert("Tämän kappaleen voi ostaa ainoastaan osana albumia."); return; }
    if (data.status != "ok" && data.message == "registration required") { alert("Kirjaudu tai rekisteröidy. Lataaminen vaatii rekisteröitymisen."); return; }
    if (data.status != "ok" && data.message == "item already in order") { alert("Levy löytyy jo ostoskoristasi."); return; }
    if (data.status != "ok") { alert("Outo virhe(12221)"); console.log(data); return; }
    
    shop.data = data.render_data;
    if (action == "add_album" || action == "add_track") {
      shop.showCueMessage((action == "add_track" ? "Kappale" : "Levy") + ' lisätty ostoskoriin<br><span style="font-weight:normal;">' + (shop.data.products.length > 1 ? "Yhteensä " + shop.data.products.length + " tuotetta": ""));
    }
    if (action == "add_gift_certificate") {
      shop.showCueMessage('Lahjakortti lisätty ostoskoriin<br><span style="font-weight:normal;">' + (shop.data.products.length > 1 ? "Yhteensä " + shop.data.products.length + " tuotetta": ""));
      setTimeout("location.reload(true)", 500);
    }

    if (old_data.active == 0 && shop.data.active == 1) shop.showBar();
    if (shop.data.active == 0) {
       shop.showCart(0);
       setTimeout(shop.hideBar, 200);
       return;
    }
    elem("shop-bar-info-text").innerHTML = shop.data.bar_info_text;
    if (shop.popup.state == 1) shop.refreshPopup();
    //if (action == "remove_products" && !shop.data.products.length) {
    //  shop.showCart(0);
    //  shop.hideBar();
    //}    
  },
  
  refreshPopup: function() {
  
    var products = nemDeepCopy(shop.data.products);
  
    if (shop.data.discount > 0) {
      var str = shop.data.voucher.description;
      if (str == undefined) str = "Kampanjatarjous";
      products.push({order_productID: 0, name: "Alennus", info: str, image: "", url: "", price: -shop.data.discount});
    }
  
    var row_template = "<tr>"
    row_template += '<td width="80" style="padding-bottom:10px;">[image]</td>'
    row_template += '<td style="padding-left:5px;padding-top:15px;" valign="top"><b>[name]</b><br>[info]</td>';
    row_template += '<td width="80" style="padding-left:5px;padding-top:15px;" valign="top" align="right"><b>[price] &euro;</b><br>'
    row_template += '<a style="[hide_delete]" onclick="shop.removeItem([pID]);return false;" href="">Poista</a>'
    row_template += '</td></tr>';
    var rows = "";
    for(var i=0;i<products.length;i++) {
      var product = products[i]
      var row = row_template;
      row = row.replace(/\[image\]/, product.image);
      var name = (product.url != "" ? '<a href="' + product.url + '">' + product.name + '</a>' : product.name);  
      row = row.replace(/\[name\]/, name);
      row = row.replace(/\[info\]/, product.info);
      row = row.replace(/\[price\]/, nemFormatPrice(product.price));
      row = row.replace(/\[pID\]/, product.order_productID);
      row = row.replace(/\[hide_delete\]/, product.order_productID == 0 ? "display:none;" : "");
      rows += row;
    }
    var table = '<table width="95%" cellpadding="0" cellspacing="0">[rows]</table>';
    elem("shop-bar-popup-table").innerHTML = table.replace(/\[rows\]/, rows);
    elem("shop-bar-total-price").innerHTML = nemFormatPrice(shop.data.total_actual_price) + " &euro;";
  },
  
  checkout: function() {
    if (shop.data.active) {
      document.location = "/downloads/kassa";      
    }
  },

  //messages: {queue:[], state: "waiting", hideTimerID: 0},  
  showCueMessage: function(text, seconds) {
    if (!seconds) seconds = 3;
    var queue = Effect.Queues.get('cue');
    var cancelled = 0;
    queue.each(function(effect) { cancelled++; effect.cancel(); });
    $("shop-visual-cue-text").innerHTML = text;
    if (cancelled) $("shop-visual-cue").hide();
    new Effect.Appear($("shop-visual-cue"), {queue: {position:"end", scope:"cue"},  duration:0.5});
    new Effect.Fade($("shop-visual-cue"), {queue: {position:"end", scope:"cue"}, delay:seconds, duration:0.5});
  }
  
};





