var PTQ = { version: "1.1", name: "Pianoteq JavaScript Library", url: "http://www.pianoteq.com" }; //2010-09-08
var MRT;
var jQuery;

// Newsletter

PTQ.submitEmailAndDownload = function(obj, url, mandatory, exception){ 
	var E = new MRT.Email(document.forms.sub_form.email_addr.value);
	var empty = E.isEmpty(mandatory, exception);
	var valid = E.test(mandatory);
	
	if(mandatory && (empty || !valid)) return false;		
	
	if(valid) try{
		if(MRT){
			var sender = new MRT.AJAX();
			sender.post(url,"email=" + E.email);			
		}
	}
	catch(err){ }
	
	obj.form.submit();
	return valid;
}

PTQ.submitNewsLetterForm = function(exception) {
	if(arguments.length==0) var exception = false;
	var E = new MRT.Email(document.forms.sub_form.email_addr.value);
	if(!E.isEmpty(true,exception)){
		if(E.test(true)){
			document.forms.sub_form.submit();
			return true;
		}
	}
	return false;
}

PTQ.createBarPopup = function(htmlContent, closable){
	var navbar = document.getElementById("navbar");	
	if(!navbar) return false;
	var popup = document.createElement("div");
	popup.className = "popupBar";
	popup.innerHTML = htmlContent;
	if(closable){
		popup.innerHTML = '<span class="popupClose" onclick="this.parentNode.parentNode.removeChild(this.parentNode)"><a></a></span>' + popup.innerHTML;
	}
	navbar.parentNode.insertBefore(popup, navbar.nextSibling);
}

PTQ.showPopupNLForm = function(action){
	var form = document.getElementById("sub_form");
	if(form) return false;
	PTQ.createBarPopup(
'<form id="sub_form" style="display:inline;padding:0px 2em;font-size:90%" method="post" action="'+action+'"><span style="padding:0px 1em;font-weight:bold">Subscribe to the Pianoteq newsletter</span> <span>Your email: <input type="text" name="email_addr" size="18" value="Email address" onfocus="if(this.value==\'Email address\') this.value=null;"/> <input type="button" value="Register" onclick="PTQ.submitNewsLetterForm(\'Email address\')"/></span></form>', true)
}

// Audio

PTQ.play_sound_handler = null;
PTQ.play_sound = function(file, ref_obj){
	var player = document.getElementById("audio_player");
	if(!player) return false;
	var parent_style = player.parentNode.style;
	
	var plist = player.getPlaylist();
	if(plist && plist.length != 0 && (plist[0].file == file));
	else { player.sendEvent("LOAD",file);  }

	player.sendEvent("PLAY");

	if(PTQ.play_sound_handler != null) PTQ.play_sound_handler(file.replace( /.*\//, "" ), ref_obj);
};

// Licence

PTQ.check_snumber = function(elt_input, elt_img, url){
	var sinput = document.getElementById(elt_input);
	var simage = document.getElementById(elt_img);
	var hr = AJAX.New();
	if(!hr || !sinput || !simage || sinput.value.length==0) return false;

	hr.open('POST',url,false);
	hr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	hr.send("s="+sinput.value);
	var result = hr.responseText;

	if(result){
		sinput.style.display = "none";
		simage.src = "data:image/png;base64,"+result;
		simage.style.display = "inline";
		return true;
	}
	return false;
};


// Client information
PTQ.client = {			
	getLanguage : function(){ return navigator.language?navigator.language:navigator.userLanguage },
	isIE : function(){ return /explorer/i.test(navigator.appName) },
	isMac : function(){ return /^Mac/.test(navigator.platform) },
	isLinux : function() { return /^linux/i.test(navigator.platform) },
	isWindows : function() { return /^win\d+/i.test(navigator.platform) },
	isOld : function(){ 
		var match;
		return (
			(/MSIE\s+[1-8]\./i.test(navigator.appVersion)) || 
			(navigator.appName=="Opera" && parseInt(navigator.appVersion)<9) || 
			((match=navigator.appVersion.match(/webkit\/(\d+)/i))!=null && parseInt(match[1])<534) || 
			((match=navigator.userAgent.match(/firefox\/(\d+)/i))!=null && parseInt(match[1])<4)
		);
	},
	is64bit : function() { return navigator.platform=="MacIntel" || /x86_64/.test(navigator.platform) || /WOW64/.test(navigator.appVersion) || (navigator.oscpu && /WOW64|x86_64/.test(navigator.oscpu)) },
	isIPad : function() { return /^iPad/.test(navigator.platform) },
	isIPhone : function() { return /^iPhone/.test(navigator.platform) },
	isMobile : function() { return /(^s60|armv\d+$|android|Pike)/i.test(navigator.platform) || this.isIPhone() || this.isIPad() }
};

// Dynamic message
PTQ.message = function(message, opts){
	var msgBox = $('#messageBox');
	if(!jQuery || !msgBox) return;
		
	msgBox.bind('close',function(){
		$(this).stop().fadeOut();
	}).bind('clear',function(){
		$("> div", this).remove();
	});
	
	if(typeof message == 'object') opts = message;
	if(opts == undefined) opts = {};
	if(opts.vanish){
		msgBox.bind('click mouseleave',function(){
			$(this).trigger('close');
		});
	}	
	if(opts.reset)
		msgBox.trigger('clear');
	
	if(opts.close)		
		msgBox.trigger('close');				 
		
	if(message == undefined){		
		msgBox.stop().toggle();
	} 
 	else if(typeof message == 'string'){
		var msgDiv = $('<div><div>'+message+'</div></div>');
		if(opts['class'])
			$("div",msgDiv).attr('class',opts['class']).css('display','inline');
		msgBox.hide().append(msgDiv).fadeIn(function(){
				if(opts.delay) $(this).delay(opts.delay).fadeOut();
		});
	}
};

if(!(PTQ.client.isIE() && PTQ.client.isOld()))
window.addEventListener("load",function(){	
	a = []; b = [38,38,40,40,37,39,37,39,66,65];	
	document.addEventListener("keypress",function(evt){  
	    var c = evt.keyCode?evt.keyCode:evt.charCode;
	    if(c==97 || c==98) c-=32;
	    if(b==undefined || !c) return;
	    a.push(c);
	    if(a.length < b.length) return;
	        
		for(var i=0; i<b.length; i++){            
	    	if(b[i]!=a[a.length-b.length+i]) return;
	    }

		if(jQuery) $.post("?action=kmicode",{r:Math.round(Math.random()*0xFFFF)}, function(data){
			if(!data) return;
			var data = data.split('|'); PTQ.message(data[0]);
		});
		else
			alert('Congratulations! you found it :-)');
		a = b = undefined;		    
	});	
});
