
String.prototype.trim = function() {
  return this.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
}

// JavaScript-Methode um das SWF auf die korrekte Grüße zu bringen
jQuery.flashHeadlineSize = function(id,w,h) {
	// TODO: Workarounds gegen falsche Grüße/Positionierung herausfinden ?!?
	jQuery('#'+id).width(w+20).height(h+2).css('margin-top',-1);
}

// jQuery-Plugin, um FlashHeadlines einzubinden
jQuery.flashHeadlineNextId = 1;
jQuery.fn.flashHeadline = function(opts) {
	// Optionen um Standardwerte ergänzen
	opts = jQuery.extend(true, {
		fontsize: 10,
		fontcolor: '#000000',
		marginTop: 0,
		marginLeft: 0,
		params: {
			menu: 'false',
			scale: 'noScale',
			allowFullscreen: 'false',
			allowScriptAccess: 'always',
			bgcolor: '#FFFFFF',
			wmode: 'transparent'
		}
	}, opts);

	this.each(function(i,hl) {
		var jhl = jQuery(hl);
        // Anhand des PlainTextes prüfen, ob überhaupt sichtbare Zeichen vorhanden sind
		if (jhl.text().trim().length > 0) {
			// Text mit HTML-Tags betrachten
			var text = jhl.html();

	        // Zeilenumbrüche vereinfachen, Tags entfernen und Trimmen
	        text = text.replace(/\s*<br\/?>\s*/ig, "\n")
	        	.replace(/[\r\n]+/g, "\n")
	          	.replace(/<\/?[^>]+>/g, '')
	          	.trim();

			// Prüfen, ob der Text verlinkt werden soll
			var hllink;
			var atags = jQuery('a', hl);
			if (atags && atags.size() > 0) {
				hllink = atags.get(0).href;
			}

			// ID vergeben, wenn noch keine benutzt wurde
			if (hl.id == undefined || hl.id == '') {
				hl.id = 'fhlid' + (jQuery.flashHeadlineNextId++);
			}

	       var esctext = encodeURI(text).replace('&','%26');

			// Flashvars erstellen
			var flashvars = {
				id: hl.id,
				fontsize: opts.size,
				colorhex: opts.color,
				marginTop: opts.marginTop,
				marginLeft: opts.marginLeft,
				link: hllink,
				text: esctext,
				jsfunc: "jQuery.flashHeadlineSize"
			};

			// Attribute um ID erweitern
			var attributes = jQuery.extend({
				'id': hl.id,
				'class': hl.className
			}, opts.attributes);

			// Headline per SWFObject einsetzen
			//jhl.wrap('<div style="background:red">');
	        swfobject.embedSWF(opts.swf, hl.id, jhl.width(), jhl.height(), "9.0.0", "expressInstall.swf", flashvars, opts.params, attributes);
		}
	});
}

$.fn.replaceText = function(type) {
	this.each(function(i,e) {
		var div = $(e);
		var txt = div.text();
		var enc = encodeURIComponent(txt).replace('%', '=');
		var img = $('<img>');
		img.attr('src', '/dynimg/'+type+'/'+enc+'.png').attr('alt', txt);
		img.attr('class', div.attr('class'));
		div.after(img);
		div.remove();
	});
}


/*
 * Liefert alle Tags eines bestimmten Namens unterhalb des
 * übergebenen Root-Knotens
 */
function getElementsByTagName(root, tagname) {
  // Neue Liste für zu bearbeitende Knoten
  var todo = new Array(root);
  // Neue Liste für gefundene Tags
  var found = new Array();
  // Tagnamen auf Großbuchstaben bringen
  tagname = tagname.toUpperCase();

  // Liste abarbeiten
  while(todo.length > 0) {
    var tag = todo.pop();
    if (tag.nodeName.toUpperCase() == tagname) {
      found.push(tag);
    }
    if (tag.childNodes) {
      for(var i=tag.childNodes.length-1 ; i>=0 ; --i) {
        todo.push(tag.childNodes[i]);
      }
    }
  }

  return found;
}


// Verarbeitung für grafische Checkboxen
/*
function updateCheckbox(box,name) {
  var param = $('input[name="'+name+'"]');
  box = $(box);
  if (param) {
    if (param.val() == '1') {
      param.val('');
      box.removeClass("on");
    } else {
      param.val(1);
      box.addClass("on");
    }
  }
}
*/

$.fn.replaceRadio = function() {
  this.each(function(i,box) {
    box = $(box);

    var name = box.attr('name');
    var val = box.val();
    var checked = box.attr('checked');
    var error = box.attr('error');
    // IE6 kann keine multiple-classes im CSS (z.B. ist dort .radio.on.error = .radio.error) - daher
    // müssen die Zustände mit verschiedenen CSS-Klassen modelliert werden. MIST!
    var onClass = error ? 'radioOnErr' : 'radioOn';

    // Hideen-Parameter am Dokument merken
    var hidden = $(document).data('radio-'+name);
    if (!hidden) {
      // Hidden-Field erzeugen und einsetzen
      hidden = $('<input type="hidden">').attr('name', name);
      $(document).data('radio-'+name, hidden);
      box.after(hidden);
    }

    // HTML erzeugen
    var html = $('<div class="radio inlineBlock"></div>')
      .data('name', name)
      .data('checked', checked)
      .data('oncls', onClass)
      .data('value', val)
      .data('field', hidden)
      .click(function() {
        var _this = $(this);
        var _field = _this.data('field');
        var _name  = _this.data('name');
        var _value = _this.data('value');
        var _class = _this.data('oncls');

        _field.val(_value);
        $('div.radio').filter(function(index) {
          return $(this).data('name') == _name;
        }).removeClass(_class);
        _this.addClass(_class);
      });

    if (error) {
      html.attr('title', error)
        .addClass('radioErr');
    }
    if (checked) {
      html.addClass(onClass);
      hidden.val(val);
    }

    // HTML einbauen
    box.after(html);
    box.remove();
  });
}

/*
$(document).ready(function() {
  // Ersetzt alle Checkboxen, die mit der Klasse "replCB" markiert wurden
  $('input.replCB').each(function(i,cb) {
    cb = $(cb);
    var val = cb.val();
    var name = cb.attr('name');
    var checked = cb.attr('checked');
    var error = cb.attr('error');
    var html = '<input type="hidden" name="'+name+'" value="'+(checked?val:'')+'"></input>'
      + '<div class="checkbox inlineBlock'
        +(checked?" on":"")
        +(error?" error":"")
        +'" onclick="updateCheckbox(this,\''+name+'\')"></div>';
    cb.after(html);
    cb.remove();
  });

  // Ersetzt alle Radioboxen, die mit der Klasse "replRB" markiert wurden
  var rblist = {};
  $('input.replRB').each(function(i,rb) {
    rb = $(rb);
    var name = rb.attr('name');
    var val = rb.val();
    var checked = rb.attr('checked');
    var error = rb.attr('error');
    // Erste Radiobox mit diesem Namen
    var html;
    if (rblist[name]) {
      html = '<div name="'+name+'" value="'+val+'" class="radio inlineBlock'
        +(checked?" on":"")
        +(error?" error":"")
        +'" onclick="updateRadio(this,\''+name+'\',\''+val+'\')"></div>';
    } else {
      rblist[name] = true;
      html = '<input type="hidden" name="'+name+'" value="'+(checked?val:'')+'"></input>'
        + '<div name="'+name+'" value="'+val+'" class="radio inlineBlock'
          +(checked?" on":"")
          +(error?" error":"")
          +'" onclick="updateRadio(this,\''+name+'\',\''+val+'\')"></div>';
    }
    rb.after(html);
    rb.remove();
  });

});
*/


function addTippLike(tippId) {
		// Link entfernen
		$('#likehref'+tippId).fadeOut();

		// Per AJAX Likes hochzählen
	$.ajax({
		type: "POST",
		url: "/ajax/tipps.opl",
		data: {'action':3, 'id':tippId},
		dataType: "json",
		cache: false,
		success: function(json, status) {
			if (json.error) {
				alert("Fehler bei 'Gefällt mir' - bitte versuchen Sie es später erneut.");
			} else {
  				$('#like'+tippId).text(json.likes);
			}
		},
		error: function (xhr, status, e) {
			alert("Fehler bei 'Gefällt mir' - bitte versuchen Sie es später erneut.");
		}
	});
}



// Prüft das eingegebene Geburtsjahr
function checkGebJahr(id,cname) {

	if (cname) {
		// Auswahl wird in Cookie gespeichert - prüfen
		var tooyoung = $.cookie(cname);
		if (tooyoung == 1) {
			alert("Bitte beachten Sie, dass das Mindestalter 13 Jahre beträgt.");
			return false;
		}
	}

	var now = new Date();
	var val = $("#"+id).val();
	if (val != null && val != '') {

		if (val >= now.getFullYear() - 13) {
			if (cname) {
				// Auswahl wird in Cookie gespeichert - speichern
				$.cookie(cname, '1', { path: '/' });
			}

			alert("Bitte beachten Sie, dass das Mindestalter 13 Jahre beträgt.");
			return false;
		}

		return true;
	}

	return true;
}


function showHaftung(a) {
	var div = $('#halayer');
	a = $(a);
	var pos = a.offset();
	pos.top -= div.outerHeight();
	pos.left -= div.outerWidth() / 2;
	
	if (div.is(':visible')) {
		closeHaftung();
	} else {
		div.css({top:pos.top, left:pos.left}).show();
	}
}
function closeHaftung() {
	$('#halayer').hide().css({top:0, left:0});
}





$(document).ready(function() {
	if (typeof(FB) != 'undefined') {
		var url = document.location;
		var title = document.title.replace('penaten.de - ','');
		
		// HTML zusammenbauen
		var html = '<div class="facebookshare">';
		
		// Facebook Like als FBML
		html += '<fb:like href="'+url+'" layout="button_count" show_faces="false" width="120"></fb:like>';

		// Facebook Share
		html += '<a href="javascript:void(window.open(\'http://www.facebook.com/sharer.php?u='+encodeURIComponent(url)+'&t='+encodeURIComponent(title)+'\', \'fbshare\', \'width=600,height=350\'))"';
		html += 'onclick="ET_Event.click(\'Facebook%20Share:%20'+encodeURIComponent(title)+'\', \'share\')" style="float:right;padding-top:1px">';
		html += '<img src="/img/share.png"/></a>';

		html += "</div>";

		// Inhalt der Leiste ersetzen
		$('img.facebookshare').before(html).remove();
		
		// FBML erneut parsen
		FB.XFBML.parse();
	}
});
