/**
 * @author joachim.kliemann
 */

/*
 Shortcuts
 */

var $D	= YAHOO.util.Dom;
var $E	= YAHOO.util.Event;
var $A	= YAHOO.util.Anim
var $CA	= YAHOO.util.ColorAnim
var $C	= YAHOO.util.Connect;

var $DD	= YAHOO.util.DD;
var $DDP = YAHOO.util.DDProxy;

var $DDM = YAHOO.util.DDM;

var $Eff = YAHOO.widget.Effects;

var $log = YAHOO.log;

var $M	= YAHOO.util.Motion;

var $Ease = YAHOO.util.Easing;
var $ = $D.get;

/*
 Namespace f�r hmmh-Extensions
 */

YAHOO.namespace("hmmh");

/*
 * YAHOO.hmmh.Util
 * Util-Methoden hmmh
 * @extends YAHOO.hmmh
 */

YAHOO.hmmh.Util = {};
YAHOO.hmmh.Util.form = {};
/** Verabeitet String zu Objekt, z.B. JSON_String -> JSON_Object
 *  @method stringToObj
 * @param {String} ObjString String to be converted to an object (e.g. JSON)
 * @return {Object} Object from String
 */
YAHOO.hmmh.Util.stringToObj = function (ObjString) {
  return eval('(' + ObjString + ')');
};

/**
 * Prueft, ob Element leer,false oder ungueltig
 * @return false, wenn Element false, null oder undefined; 
 * auch die Strings "false" oder "FALSE" liefert false zurück
 */
YAHOO.hmmh.Util.isValid = function (obj) {
	if(typeof obj == "undefined" ||
	   obj == null ||
	   obj == false ||
	   (typeof obj =="string" &&
	   obj.toLowerCase() == "false")) {
		return false;
	}
	return true;
}

/**
 * Prueft, ob Element leer oder ungueltig, 
 * @return true, wenn Element leer, null oder undefined; 
 * 
 */
YAHOO.hmmh.Util.isEmpty = function (obj) {
	if(typeof obj == "undefined" ||
	   obj == null ||
	   obj == "") {
		return true;
	}
	return false;
}
/**
 * Konvertiert HTML-Entitaeten in Text, verwendet dafuer die
 * Browser-Funktionalitaet
 * @param str der String
 * @return Konvertierten String oder Parameter, wenn invalider Wert (null, false)
 */
YAHOO.hmmh.Util.decodeEntities = function (str) {
	if(!YAHOO.hmmh.Util.decoderDiv) {
		YAHOO.hmmh.Util.decoderDiv = document.createElement("div");
	}
	if(!YAHOO.hmmh.Util.isEmpty(str)) {
		YAHOO.hmmh.Util.decoderDiv.innerHTML = str;
		return YAHOO.hmmh.Util.decoderDiv.firstChild.nodeValue;
	}
	
	return str;
}

YAHOO.hmmh.Util.findClass = function (el, sClass) {
		if($D.hasClass(el, sClass)){
			return el;
		}	
		if(!el || !el.parentNode){
			return false;
		}	
		else {
			return this.findClass(el.parentNode, sClass);
		}	
}


YAHOO.hmmh.Util.findUrlValue = function(findValue){
	if(!findValue){return false;}
	var reg = new RegExp(findValue);
	var urlParameter = window.location.search.slice(1, window.location.search.length);
	var urlParamTemp = urlParameter.split("&");
	for (i=0; i <= urlParamTemp.length-1; i++) {
		if(urlParamTemp[i].search(reg) == 0){
			urlParamTemp = urlParamTemp[i].split("=");
			return urlParamTemp[1];
		}
	}
}

/**
 * Aendern des types eines Input-Feldes; der IE ist nicht in der Lage,
 * den Typen eines Formularfeldes zu aendern
 * WICHTIG: Eventhandler gehen fuer das Input-Feld bei dieser
 * Funktion fuer den IE verloren!!! Des weiteren geht im IE der Focus verloren
 * @param el das Form-Element
 * @param type setze Feld-Type -Attribut auf "type", default "text"
 */
YAHOO.hmmh.Util.form.setFieldType = function(el, type) {
	if(!el) return;
	if(typeof type == "undefined") type = "text";
	
	// IE
	if(YAHOO.env.ua.ie >0) {
		var content = el.outerHTML;
		
		content = content.replace(/<INPUT/,'<INPUT type="' + type + '"');

		el.outerHTML = content;
	}
	else {
		el.type = type;
	}
}

/**
 * Set server target for form and submit form if spcified
 * @param targetN the name of the server target
 * @param formName name (and ID) of form to be submitted
 * @param anchor named anchor for target page
 */
YAHOO.hmmh.Util.form.goToTarget = function (targetN, formName, anchor) {
	if($U.isValid(formName) && formName.trim() !="") {
		var hiddenFormContainer = YAHOO.util.Selector.query("form #hidden-div")[0];
		if(hiddenFormContainer) {
			hiddenFormContainer.innerHTML = '<input type=hidden name=_target' + targetN + ' value="" />';
			sendform(formName, anchor);
			return true;
		}
	}
	return false;
}

/**
 * Set focus on form fields after setting of type (IE only)
*/
YAHOO.hmmh.Util.form.setFocusIE = function(id) {
	var myElement = $D.get(id);
	myElement.hasFocus = false;
	setTimeout( function () {
		if(!myElement.hasFocus) {
			myElement.focus();
			myElement.hasFocus = true;
		}
	},
	10);
}

/**
 * Eventhandler for disabling Return key on input form fields
 */
YAHOO.hmmh.Util.form.disableReturn = function(ev) {
	var trg = $E.getTarget(ev);
	if(trg.tagName && trg.tagName.toLowerCase()=="input") {
		if(ev.keyCode && ev.keyCode==13) {
			$E.stopEvent(ev);
			return false;
		}
	}
}
/**
 * Activate disabling Return key for form element
 */
YAHOO.hmmh.Util.form.activateEnterDisabled = function(el) {
	YAHOO.util.Event.addListener(el, "keypress", YAHOO.hmmh.Util.form.disableReturn);
}

$U = YAHOO.hmmh.Util;


Array.prototype.map = function(fn, thisObj) {
    var scope = thisObj || window;
    var a = [];
    for ( var i=0, j=this.length; i < j; ++i ) {
        a.push(fn.call(scope, this[i], i, this));
    }
    return a;
};

Array.prototype.filter = function(fn, thisObj) {
    var scope = thisObj || window;
    var a = [];
    for ( var i=0, j=this.length; i < j; ++i ) {
        if ( !fn.call(scope, this[i], i, this) ) {
            continue;
        }
        a.push(this[i]);
    }
    return a;
};

Array.prototype.indexOf = function(el, start) {
    var start = start || 0;
    for ( var i=0; i < this.length; ++i ) {
        if ( this[i] === el ) {
            return i;
        }
    }
    return -1;
};

/**
 * Generic trim functions for Strings
 */
String.prototype.trim = function() { return (this.replace(/\s+$/,"").replace(/^\s+/,"")); };
String.prototype.contains = function(t) { return this.indexOf(t) >= 0 ? true : false };
(function(){
    // if uneval is predefined, skip it
    try{ eval('uneval'); return; }catch(e){};

    var protos = [];
    var uneval_asis = function(o){ return o.toString() };

    /* predefine objects where typeof(o) != 'object' */
    var name2uneval = {
	'boolean':uneval_asis,
	'number': uneval_asis,
	'string': function(o){
	    return '\''
	    + o.toString().replace(/[\\\"\']/g, function(m0){
		return '\\' + m0;
	    })
	    + '\'';
	},
	'undefined': function(o){ return 'undefined' },
	'function':uneval_asis
    };

    var uneval_default = function(o, np){
	var src = []; // a-ha!
	for (var p in o){
	    if (!o.hasOwnProperty(p)) continue;
	    src[src.length] = uneval(p)  + ':' + uneval(o[p], 1);
	}
        // parens needed to make eval() happy
	return np ? '{' + src.toString() + '}' : '({' + src.toString() + '})';
    };

    uneval_set = function(proto, name, func){
	protos[protos.length] = [ proto, name ];
	name2uneval[name] = func || uneval_default;
    };

    uneval_set(Array, 'array', function(o){
	var src = [];
	for (var i = 0, l = o.length; i < l; i++)
	    src[i] = uneval(o[i]);
	return '[' + src.toString() + ']';
    });
    uneval_set(RegExp, 'regexp', uneval_asis);
    uneval_set(Date, 'date', function(o){
	return '(new Date(' + o.valueOf() + '))';
    });

    var typeName = function(o){
	// if (o === null) return 'null';
	var t = typeof o;
	if (t != 'object') return t;
	// we have to lenear-search. sigh.
	for (var i = 0, l = protos.length; i < l; i++){
	    if (o instanceof  protos[i][0]) return protos[i][1];
	}
	return 'object';
    };

    uneval = function(o, np){
	// if (o.toSource) return o.toSource();
	if (o === null) return 'null';
	var func = name2uneval[typeName(o)] || uneval_default;
	return func(o, np);
    }
})();

(function(){
    try{ eval('clone'); return; }catch(e){};
    clone = function(o){
	try{
	    return eval(uneval(o));
	}catch(e){
	    throw(e);
	}
    };
})();

getParentByTagName = function(elm, tag) {
	if (elm && elm.parentNode) {
		return (elm.nodeName.toLowerCase()==tag) ? elm : this.getParentByTagName(elm.parentNode, tag);
	} else {
		return null;
	}
};

getParentByClassName = function(elm, classname) {
	if (elm && elm.parentNode) {
	return ($D.hasClass(elm, classname)) ? elm : this.getParentByClassName(elm.parentNode, classname);
	} else {
		return null;
	}
};

/**
 * @version 2009-03-11
 */
function sendform(name, anchor) {
	if(YAHOO.env.ua.ie) {
		for(i=0; i < document.forms.length ;i++) {
			form=document.forms[i];
			if(form.name == name)
				break;
		}
		form.method = "POST"; // Why does IE forget this??
	} else {
		form = document.forms[name];
	}
	if(typeof anchor != "undefined" && form && form.action) {
		form.action = form.action + "#" + anchor;
	}

	try {
		form.submit();
	} catch(e) {
		this.form.submit();
	}
};

var BildArray = new Array();

BildArray[0] = "/img/b_minus.png";
BildArray[1] = "/img/b_plus.png";
BildArray[2] = "/img/pagination_weiter.gif";
BildArray[3] = "/img/pagination_zurueck.gif";
BildArray[4] = "/img/ordering_process/bt_zurKasseWk_inaktiv.png";
BildArray[5] = "/img/ordering_process/bt_zurKasseWk_aktiv.png";
BildArray[6] = "/img/btbg/bg_fontShuffle_gelb.png";

YAHOO.preloadImages = function() {
		return {
			init : function() {
				for (i=0; i < BildArray.length; i++) {
			    	var Bild = new Image();
			    	Bild.src = BildArray[i];
			    }
			}
		};
	}();
YAHOO.util.Event.addListener(window, "load", YAHOO.preloadImages.init, YAHOO.preloadImages, true);

