// JavaScript Document
var requests = Array();
var lastrequests = Array();
var lastHref;
var gm;

function request_input(inp){
	if(inp) lta.input = inp;
	if(lta.input.attr("nosubmit") == "true") return;
	if(lta.input == null) return;
	var p = {};
	var query = lta.input.val();
	if(!trim(query)) return;
	p.a = lta.input.attr("a");
	p.m = lta.input.attr("m");
	p.s = lta.input.attr("s");
	if(p.a == "search" && p.m == "lta"){ 
		if(!p.s) p.s = lta.search.s; else
		lta.search.s = p.s;
	}
	if(inp) lta.input = null;
	if(!p.m || p.m == "lta") p.query = query;
	else p[p.m] = query;
	if(p.a == "login") return login("lta");
	p.href = Plink(p);
	requestP(p);
}

function alreadySent(r){
	for(i in requests) {
		if(requests[i] == r) return true;
	}
	return false;
}

function prepare(p, it){
	//p = neue query
	//q = alte query
	if(p.o == "refresh" || p.cont) return p;
	var non = ",pl,pl-new,"
	var noa =",add,play,listen,remove,repair,logout,login,favorite,hate,download,update,playinfo,getcover,video_changed,silence,save,add-own,autocomplete,exists,register,";
	if(non.indexOf(","+p.n+",") !== -1 || noa.indexOf(","+p.a+",") !== -1) return p;
	var r = objectToStr(p);
	if(alreadySent(r)) {
		var q = lastrequests[r];
		if(q) {
			var pod = pods[q.pod];
			lta.showPod(q.pod);
			return false;
		} else
		return p;
	}
	if(!p.pod)
	p.pod = lta.addPod();
	lta.showPod(p.pod);
	if(pods[pod]) pods[p.pod].load();

	requests.push(r);
	lastrequests[r] = p;
	return p;
}

function requestsQueue(){
	this.reqs = Array();
	this.queue = function(p){
		this.reqs.push(p);
	}
	this.submit = function(){
		if(this.reqs.length > 0) {
			//if(test) alert(1);
			$.ajax({
				type: "POST",
				url: "ltajax.php",
				data: this.reqs[0],
				success: response,
				complete: request_completed
			});
			this.reqs.splice(0, 1);
		} else $("#loading").hide();
	}
}

function requestP(p, it){
	//for(var i in p) alert('parameter[\''+i+'\'] is ' + p[i]);
	p = prepare(p, it);
	if(!p) return;
	for(var i in p) {
		if(typeof p[i] == "string") p[i] = p[i].replace(/%26/, "&");
		if(!p[i]) p[i] = "";
	}
	p.rid = generateID();
	if(it && !links[p.rid] && $(it).html() != __("load")) {
		links[p.rid] = [$( it ), $(it).html()];
		$(it).html(__("load"));
	}
	if(lta.loaded.request + $(".ac_loading").length > 1) {
		lta.requeue.queue(p);
		return;
	}
	lta.loaded.request++;
	p.ajax = 1;
	//$.post("ltajax.php", p, response);
	$.ajax({
		type: "POST",
		url: "ltajax.php",
		data: p,
		success: response,
		complete: request_completed,
		timeout:1000 * 10
	});
	$("#loading").show();
}

function request_completed(xhr, state){
	lta.loaded.request--;
	lta.requeue.submit();
}

function response(d, state){
	if(state == "success"){
		
		//Zur Ausgabe
		if(test)
		if(d.indexOf("playinfo") == -1 && 
		   d.indexOf("a\":\"listen\"") == -1 && 
		   d.indexOf("a\":\"video_changed\"") == -1 && 
		   d.indexOf("a\":\"remove\"") == -1 && 
		   d.indexOf("a\":\"getcover\"") == -1 && 
		   d.indexOf("a\":\"repair\"") == -1) alert(d); 
		
		if(trim(d)[0] != "(") {
			if(test) alert(d);
			return;
		}
		var p = eval(d);
		if(p.state == "error") {
			if(p.code == "wrong_captcha") Recaptcha.reload();
			displayMessage(p.message, "error");
			return;
		} else
		if(p.state == "success"){
			if(p.code == "loggedin") {
				lta.loggedin(p);
			} else
			if(p.code == "loggedout") {
				lta.loggedout(p);
			}
			if(p.code == "registered") { 
				$("#registerbox").fadeOut(1000);
				$("#login-name").val(p.uname);
				$("#login-password").select();
				lta.showPod("lta_start");
				lta.deletePod("register");
				$(".register-btn").remove();
			}
			if(p.a == "download") {
				pc.videos.download.url = p.url;
				pc.videos.download.link = p.message;
			}
			displayMessage(p.message, "success");
			switch(p.a) {
				case "download":
					if(p.link)
					window.open(p.link, "Download");
				break;
				case "save": if(p.m == "playlist") return playlist_saved(p);
				break;
			}
			
			return;
		}
		//alert(1);
		//for(var i in p) alert('parameter[\''+i+'\'] is ' + p[i]);
		if((p.n == "playlist" || p.a == "add" || p.a == "add-list" || p.a == "play") && p.a != "start") {
			if(p.a == "load") {
			}
			pls.addTracks(p.content, p.a, p);
		} else
		if((p.a == "listen" && p.percent == -1) || p.a == "video_changed") {
			pc.setStille(p.mute, p.duration);
		} else 
		if(p.a == "listen"){
		} else
		if(p.a == "getcover"){
			if(trim(p.content) != "")
			$("#"+p.image).attr("src", p.content);
		} else
		if(p.a == "playinfo"){
			lta.playinfo.html(p.content);
			$("#ytlink").val("http://youtube.com/watch?v=" + pls.playitem.attr("video"));
			var is_video = !pls.playitem.attr("artist");
			pls.playitem.attr("tags", p.tags);
			pls.playitem.attr("image", p.image);
			//pls.playitem.attr("artistid", p.artistid);
			if(!is_video) {
				pls.playitem.attr("albums", p.albums);
			}
			if(p.isfavorite) $(".favorite").addClass("set"); else $(".favorite").removeClass("set");
			lta.loaded.infos = true;
			if(!pc.full_screen) $("#down-nav").show();
		} else
		if(p.a == "autocomplete"){
			
		} else
		if(p.cont) { 
			if(p.page) {
				var sel = ".entry,.more";
				if(p.a == "getimages") sel = "*";
				$("#"+p.cont).replaceWith(formatter(p.content, sel, p));
			}
			else {
				$("#"+p.cont).replaceWith(p.content);
			/*
			if(!p.insert)
			$("#"+p.cont).replaceWith(p.content); else {
				$("#"+p.cont).html(p.content);
				setJEvents($("#"+p.cont), p);
			}*/
				setJEvents($("#"+p.cont), p);
			}
			after_request(p);
		} else
		contentPod(p.pod, p.content, p.headline, p);

		setLinkHtml(p.rid);
	} 
}

function contentPod(pod, content, headline, params){ //Params und p nicht verwechseln!
	if(!pod) return;
	var p = pods[pod];
	if(!p) return after_request(params);
	//alert(p.id);
	p.self.attr("href", params.href);
	if(params.o == "refresh") {
		p.can("refresh", 1); 
	}
	p.state("ok");
	//alert(params.href);
	
	//alert($("#"+pod+" > .sub").length);
	//alert(params.sub);

	p.sub().replaceWith('<div class="sub"><div class="middle">'+content+"</div></div>");
	var sub = params.sub;
	p.headline(headline);
	//Sub-Class setzen wenn vorhanden
	if(params.sub_class)
	p.sub().addClass(params.sub_class);
	if(params.cantrefresh) p.can("refresh", 0);
	if(params.cantclose) p.can("close", 0);
	p.unload();
	p.show();
	
	setJEvents(p, params);
	after_request(params);
}

function after_request(params){
	if(params.a == "getimages" || params.s == "getimages") decoGreyboxLinks();
	setSizes();
	if(params.newRequest) { 
		var p = eval("("+params.newRequest+")");
		makeIt(p); 
	}
	//getCovers();
}

function test(data, textStatus){
	if(textStatus == "success"){
		echo(data);
	}
}

function objectToStr(o){
	var out = "";
	var not = ",null,href,headline,o,ar,pod,noshow,sub,artistid,releaseid,getcover,silence,s,,";
	var keys = [];
	for(var i in o)
		if(not.indexOf(","+i+",") == -1 ) {
			keys.push(i);
		}
	keys.sort();
	var q = [];
	for(var i in keys) out += o[keys[i]];
	out = trim(out).replace(/[\s]*/g, "_").replace(/[\"\']/g, "").toLowerCase();
	return out;
}




















/**
*
*  URL encode / decode
*  http://www.webtoolkit.info/
*
**/
 
var Url = {
	// public method for url decoding
	decode : function (string) {
		return this._utf8_decode(unescape(string));
	},
 
	// private method for UTF-8 decoding
	_utf8_decode : function (utftext) {
		var string = "";
		var i = 0;
		var c = c1 = c2 = 0;
		utftext = utftext.replace(/\+/g, " ");
 
		while ( i < utftext.length ) {
 
			c = utftext.charCodeAt(i);
 
			if (c < 128) {
				string += String.fromCharCode(c);
				i++;
			}
			else if((c > 191) && (c < 224)) {
				c2 = utftext.charCodeAt(i+1);
				string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
				i += 2;
			}
			else {
				c2 = utftext.charCodeAt(i+1);
				c3 = utftext.charCodeAt(i+2);
				string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
				i += 3;
			}
 
		}
 
		return string;
	}
 
}
