/**
 * Wraps general functions for input control. E.g. methods for defaultizing text inputs 
 * and textarea are included as well as methode to resticts amount of characters that can be
 * entered int textares. 
 */
var Toolkit = Class.create();
Object.extend(Toolkit.prototype, {

	/**
	 * Initialize
	 */
	initialize : function(){
	},

	/**
	 * Adds default texts to textareas and textinputs
	 *
	 * @param obj HtmlElement Input[type=text] or Teaxtarea
	 */
	defaultize : function (obj){
		obj = $(obj);
	
		// get default text from title attribute
		var defaultText = obj.getAttribute('title');
		if( defaultText.length <= 0 || obj.value.length > 0){
			return false;
		}

		var originalType = obj.getAttribute('type');
		
		try {
			// if this is a password input change type
			// note: this might throw an exception in IE
			if( obj.tagName == 'INPUT' ){
				obj.type = originalType=='password' ? 'text' : originalType;
			}
			
			obj.defaultValue = defaultText;
			obj.value = defaultText;
			obj.addClassName('defaulttext');
		
			// register event oberserver to clear default text
			Event.observe(obj, 'focus', function(evt){
				if( obj.value == defaultText ){
					obj.value = '';
					obj.removeClassName('defaulttext');
					if( obj.tagName == 'INPUT' ){
						obj.type = originalType;
					}
				}
			});
			Event.observe(obj, 'blur', function(evt){
				if( obj.value == '' ){
					obj.value = defaultText;
					obj.addClassName('defaulttext');
					if( obj.tagName == 'INPUT' ){
						obj.type = originalType=='password' ? 'text' : originalType;
					}
				}
			});
			// Get the form containing this thing and tell it to check on submit.
			// This works not for ajax forms, since they are not submitted (but the data
			// is serialized and sent afterwards.
			var f = obj.up('form');
			try{
				Event.observe(f, 'submit', function(evt){
					if( obj.value == defaultText ){
						obj.value = '';
						if( obj.tagName == 'INPUT' ){
							obj.type = originalType;
						}
					}
				});
			} catch( ex ){}
			
		} catch( x ){}
		
		return true;
	},
	
	/**
	 * Undefaultize input elements in form f.
	 *
	 * @param f HtmlFormElement form which contains elements that are supposed to be undefaultized
	 */
	undefaultizeElements : function (f){
		f = $(f);
		var objs = f.getElementsBySelector('input[title]');
		objs.each(function(obj){
			if( obj.value == obj.getAttribute('title') ){
				obj.value = '';
			}
		});
	}
	
});
var toolkit = new Toolkit();

/**
 * Basic stuff that happen after page load
 *
 */
Event.observe(window, 'load', function(evt){
    
	// default texts
	$$('textarea[title], input[type=text][title], input[type=password][title]').each(function(obj){
		toolkit.defaultize(obj);
	});
	
});

/**
 * Weitere Funktionen für Praktiker
 *
 */
 

Event.observe(window, 'load', function(){
	jQuery('body').append('<div class="highslide-overlay closelink" id="closelink" onclick="return hs.close(this)"><a href="javascript:void(0);">Fenster schlie&#223;en</a></div>');
	jQuery('body').append('<div id="closebutton2" class="highslide-overlay closebutton" onclick="return hs.close(this)" title="Schlie&szlig;en"></div>');
	
    hs.registerOverlay({
        overlayId: 'closebutton2',
        position: 'top right',
        fade: 2, // fading the semi-transparent overlay looks bad in IE
        useOnHtml: true
    });
    hs.registerOverlay({
        overlayId: 'closelink',
        position: 'below',
		slideshowGroup: 'videos',
        fade: 2, // fading the semi-transparent overlay looks bad in IE
        useOnHtml: true
    });
	
	// Ersetzen aller Links zu .flv-Dateien mit openTVSpot
	jQuery('a[href$=".flv"]').each(function() {
		var newhref = jQuery(this).attr("href");
		newhref = newhref.substring(newhref.lastIndexOf("/")+1, newhref.length);
		newhref = "javascript:openTVSpot('"+newhref+"');";
		jQuery(this).attr("href", newhref);
		jQuery(this).attr("target", "_self");
	});
	jQuery('div[onclick^="callUrl"]').each(function() {
		var newonclick = ""+jQuery(this).attr("onclick");
	  if (newonclick.indexOf('.flv') > -1) {
			jQuery(this).removeAttr("onclick");
			var newurl = newonclick.substring(newonclick.lastIndexOf("/")+1, newonclick.indexOf('.flv')+4);
			jQuery(this).click(function() {
				openTVSpot(newurl);
			});
		}
	});
	// MP3-Links mit SoundManager abspielen
	jQuery('a[href$=".mp3"]').each(function(index) {
		var newhref = jQuery(this).attr("href");
		newhref = "javascript:playSpot('mp3spot"+index+"', '"+newhref+"');";
		jQuery(this).attr("href", newhref);
		jQuery(this).attr("id", "mp3spot"+index);
		jQuery(this).attr("target", "_self");
	});
});

function openTVSpot(videosrc) {
	videosrc="?videosrc="+videosrc;
	hs.htmlExpand(null, {
		'objectType'        :'iframe',
		'wrapperClassName'  : 'no-header no-footer',
		'preserveContent'   : false,
		'width'             : 800,
		'height'            : 455,
		'objectWidth'       : 801,
		'objectHeight'      : 460,
		'align'             : 'center',
		'scrolling'         : 'no',
		'slideshowGroup'    : 'videos',
		'src'  :'http://www.praktiker-markt.de/praktiker_de_static/einfach_neu/tv/files/videoplayer-b.html'+videosrc
	});
}

function playSpot(target, audiosrc) {

	jQuery('a[href*="javascript:playSpot(\''+target+'\'"]').attr("href", "javascript:stopSpot('"+target+"', '"+audiosrc+"');");
  soundManager.stopAll();
	soundManager.play(target, audiosrc);
}
function stopSpot(target, audiosrc) {
	jQuery('a[href*="javascript:stopSpot(\''+target+'\'"]').attr("href", "javascript:playSpot('"+target+"', '"+audiosrc+"');");
	soundManager.stop(target);
}



  
