/*
	filename: gen-arcor-basic.js
	Basic Javascript for eshop.arcor.net
	version 1.0.0 - 2006-07-10

	This code is free software; you can redistribute it and/or modify it
	under the terms of the GNU Lesser General Public License as published
	by the Free Software Foundation; either version 2.1 of the License,
	or (at your option) any later version.

	Lesser GPL license text: http://www.gnu.org/licenses/lgpl.txt
	author: christian dot wania at bluemars dot net
*/

var aJSLibraries			= new Array();
var aHintFields				= new Array();
var aMSOverImg				= new Array();
var aElements				= new Array();
var aFloatboxes				= new Array();
var aProductIkonen			= new Array();

if (typeof(sBasePathOverride) == 'undefined') var sBasePathOverride = 'js';
if (typeof(bDisableIkonenJustify) == 'undefined') var bDisableIkonenJustify = false;

//var aCnclPopupDisabledPages = new Array('asb', 'index', 'impressum', '-fertig');
var aCnclPopupEnabledPages	= new Array('bestellung-ihre-daten', 'bestellung-zusammenfassung');
var nTabIndex				= 1;
var bIsFF107				= false;
var bIsIE6					= false;

if (bGenerateDebugOutput	== undefined) var bGenerateDebugOutput	= false;	// wird extern ueber adhoc.debug gesteuert
if (bDisableAutoTabindex	== undefined) var bDisableAutoTabindex	= false;
if (bIgnoreErrors			== undefined) var bIgnoreErrors			= false;	// wird für pagereload benötigt
if (bLoadIkonenJustifyJS	== undefined) var bLoadIkonenJustifyJS	= false;



ua = navigator.userAgent.toLowerCase();
if (ua.indexOf('firefox/1.0.7')> -1)	{ bIsFF107	= true; } else { bIsFF107	= false; }
if (ua.indexOf('msie 6')> -1)			{ bIsIE6	= true; } else { bIsIE6		= false; }
if (ua.indexOf('msie')> -1)				{ bIsIE		= true; } else { bIsIE		= false; }


function loadExternalScript(sFilename) {
	oScript = document.createElement('script');
	oScript.setAttribute('type','text/javascript');
	oScript.setAttribute('src', sFilename);
	document.getElementsByTagName('head')[0].appendChild(oScript);
}

/**
 *	addEvent(oObj, sEvent, sCmdChain)
 *	Assign events to objects
 *	sEvent: event to add (onclick, onblur...)
 *	sCmdChain: string with chain of commands
 *	(alert("test1"); \n alert("test2");\n)
 */
function addEvent(oObj, sEvent, sCmdChain, sCheckVal) {
	var sFuncBody = '';
	sFuncBody += "if ( (typeof oObj != undefined) && (oObj != null) ) {\n";
	sFuncBody += "	if ( (oObj."+sEvent+" != undefined) && (oObj."+sEvent+" != '') ) {\n";
	sFuncBody += "		sNewEvent = String(oObj."+sEvent+");\n";
	sFuncBody += "		sNewEvent = sNewEvent.slice(sNewEvent.indexOf('{')+1, sNewEvent.length);\n";
	sFuncBody += "		sNewEvent = sNewEvent.slice(0, sNewEvent.lastIndexOf('}'));\n";
	sFuncBody += "	} else sNewEvent = '';\n";
	sFuncBody += "	if (sCheckVal != 'undefined') {\n";
	sFuncBody += "		if (sNewEvent.indexOf(sCheckVal) <= -1) {sNewEvent = sNewEvent + sCmdChain;}\n";
	sFuncBody += "	}\n";
	sFuncBody += "	oObj."+sEvent+" = new Function('event', sNewEvent);\n";
	sFuncBody += "}\n";
	eval(sFuncBody);
}


function switchBandwith(oSelect) {
	var aHTMLObjects = new Array('Head', 'Special', 'Runtime', 'Submit', 'Info', 'Option', 'SpecialPrize', 'NetSub', 'Button', 'CostMonthly');

	if (typeof preIkoneDDChange == 'function') preIkoneDDChange(oSelect.options[oSelect.selectedIndex].value);

	for(var i=0; i<oSelect.length; i++) {
		for (var j = 0; j < aHTMLObjects.length; j++) {
			sName = '#' + oSelect.options[i].value + aHTMLObjects[j];
			if (i == oSelect.selectedIndex) {
				$(sName).css('display', 'block');
			}
			else {
				$(sName).css('display', 'none');
			}
		}
	}
	if (typeof postIkoneDDChange == 'function') postIkoneDDChange(oSelect.options[oSelect.selectedIndex].value);
}


function regenerateTabIndex() {
	var aFields = $('form:eq(0),body').find('button,input:not(.button),textarea,select');
	var nTabIndex = 1;
	for(var i=0; i<aFields.length; i++) {
		aFields[i].tabindex = nTabIndex++; 
	}
}


function regenerateAjaxValueSubmit() {
	$('form:eq(0),body').find('input:not(.button),textarea,select').bind("blur.sessionUpdate", function(event) {
		$.ajax({
			async: "false",
			type: "GET",
			url: "ajaxupdate.html",
			data: this.name + "=" + this.value
		});
	} );
}


function cleanAJAXResponse(sHTML) {
	sHTML = sHTML.replace(/<!--\[-->(.*?)<!--\]-->/gi, '');
	return sHTML;
}
function updateSCart(sHTML) {
	if (typeof cleanAJAXResponse == 'function') sHTML = cleanAJAXResponse(sHTML);
	$('#shoppingCart').html(sHTML);
}
function getCollectionParamString(jsAddCollectParams) {
	var sCollectedParams = '';
	if (jsAddCollectParams.length) {
		for (i=0; i<jsAddCollectParams.length; i++) {
			try {
				var sObjValue = oObj.value; 
				oObj = document.getElementById(jsAddCollectParams[i]);
				if (oObj.nodeName.toLowerCase() == 'select') {
					sObjValue = oObj.options[oObj.selectedIndex].value;
				} 
				sCollectedParams += '&' + oObj.name + '=' + sObjValue; 
			} catch (e) {}  
		}
	}
	return sCollectedParams;
}
function bindCheckboxUpdate(sID, sAddParams, sRemoveParams, jsAddCollectParams) {
	$(sID).click(function () {

		if (typeof sAddParams			== 'undefined') sAddParams			= '';
		if (typeof jsAddCollectParams	== 'undefined') jsAddCollectParams	= Array();
		if (typeof sRemoveParams		== 'undefined') sRemoveParams		= '';

		var sCollectedParams = getCollectionParamString(jsAddCollectParams);

		var sDefaultValue = '';
		try {
			sDefaultValue = document.getElementById('cb' + this.id).value;
		} catch (e) {}

		var sValue = this.name + "=";
		sValue += this.checked ? this.value + sAddParams + sCollectedParams : sDefaultValue + sRemoveParams;

		$.ajax({
			"type":"GET", "url":"ajaxupdate.html", "data":"adhoc.ajaxUpdate=shoppingCart&"+sValue,	"async": false,
			"success": function(html){ if (typeof updateSCart == 'function') updateSCart(html); }
		});
	});
}
function bindRadioUpdate(sID, sAddParams, jsAddCollectParams) {
	$(sID).click(function () {

		if (typeof sAddParams ==			'undefined') sAddParams = '';
		if (typeof jsAddCollectParams ==	'undefined') jsAddCollectParams	= Array();

		var sCollectedParams = getCollectionParamString(jsAddCollectParams);

		var sValue = this.name + "=" + this.value + sAddParams + sCollectedParams;

		$.ajax({
			"type":"GET", "url":"ajaxupdate.html", "data":"adhoc.ajaxUpdate=shoppingCart&"+sValue,	"async": false,
			"success": function(html){ if (typeof updateSCart == 'function') updateSCart(html); }
		});
	});
}
function bindSelectUpdate(sID, sAddParams, jsAddCollectParams){
	$(sID).change(function(){

		if (typeof sAddParams ==			'undefined') sAddParams = '';
		if (typeof jsAddCollectParams ==	'undefined') jsAddCollectParams	= Array();

		var sCollectedParams = getCollectionParamString(jsAddCollectParams);

		var sValue = this.name + "=" + this.options[this.selectedIndex].value + sAddParams + sCollectedParams;

		$.ajax({
			"type": "GET", "url": "ajaxupdate.html", "data": "adhoc.ajaxUpdate=shoppingCart&" + sValue,	"async": false,
			"success": function(html){ if (typeof updateSCart == 'function') updateSCart(html); }
		});
	});
}
function setSCartValue(sValue) {
	$.ajax({
		"type":"GET", "url":"ajaxupdate.html", "data":"adhoc.ajaxUpdate=shoppingCart&"+sValue,	"async": false,
		"success": function(html){ if (typeof updateSCart == 'function') updateSCart(html); }
	});
}

/* Mouse hover functions */

function toggleImage(oObj, nIndex, nImg) {
	oObj.src = aMSOverImg[nIndex][nImg];
}

function injectImageHover(oTmpObj) {
	var nFoundIndex = -1;
	for (var j=0; j<aMSOverImg.length; j++) {
		if (aMSOverImg[j][0] == oTmpObj.src) {
			nFoundIndex = j;
			j = aMSOverImg.length;
		}
	}
	if (nFoundIndex == -1) {
		nFoundIndex = aMSOverImg.length;
		aMSOverImg[nFoundIndex] = Array();
		aMSOverImg[nFoundIndex][0] = oTmpObj.src;
		aMSOverImg[nFoundIndex][1] = oTmpObj.src.replace(/-no\./, "-ms.");
		
	}
	// inject hover events
	var sFunction = 'if (typeof toggleImage == "function") toggleImage(this ,' +nFoundIndex+ ', 1)';
	addEvent(oTmpObj, 'onmouseover', sFunction);

	sFunction = 'if (typeof toggleImage == "function") toggleImage(this, ' +nFoundIndex+ ', 0)';
	addEvent(oTmpObj, 'onmouseout', sFunction);
}

function preloadMSOverImages() {
	for (i=0; i<aMSOverImg.length; i++) {
		var oImg = new Image();
		oImg.src = aMSOverImg[i][1];
	}
}


function cleanAJAXResponse(sHTML) {
	sHTML = sHTML.replace(/<!--\[-->(.*?)<!--\]-->/gi, '');
	return sHTML;
}
function updateSCart(sHTML) {
	if (typeof cleanAJAXResponse == 'function') sHTML = cleanAJAXResponse(sHTML);
	$('#shoppingCart').html(sHTML);
}

/*
 *	Helper Function
 */
function injectObjEvent(oObj, sEvent, sFncName) {
	if (sFncName.indexOf("(") > -1) {
		sFuncName = sFncName.replace(/(.*?)\((.*?)\)/gi, "$1");
	}  
	var sFunction = 'if (typeof ' + sFuncName + ' == "function") ' + sFncName + ';';
	addEvent(oObj, sEvent, sFunction);
}


/**
 *	parseDomTree()
 *	Parse DOM-Tree and assign special functionality to elements containing special classes
 */
function parseDomTree() {
	var bLoadPopupJS		= false;
	var bLoadInputFieldJS	= false;
	var bLoadCancelPopupJS	= false;
	var bLoadFloatboxJS		= false;

	var sDocTree = '';

	for(var j=0; j<aCnclPopupEnabledPages.length; j++) {
		if (document.location.href.indexOf(aCnclPopupEnabledPages[j]) > 1) {
			bLoadCancelPopupJS = true;
			$(window).unload( function () {
				if (typeof openCancelPopup == "function") openCancelPopup();
			});
		}
	}

	if (typeof document.getElementsByTagName != 'undefined') {
		aElements = document.getElementsByTagName('*');
		if (aElements.length <=0) {
			if (document.all) aElements = document.all;
		}
		for (var i=0; i<aElements.length; i++) {
			switch (aElements[i].nodeName.toLowerCase()) {
				/*
				case 'body':
					if (bLoadCancelPopupJS) {
						bLoadPopupJS = true;
						sBody = 'if (typeof openCancelPopup == "function") openCancelPopup();';
						window.onunload = new Function(sBody);
					}
				break;*/
				case 'img':
					aElements[i].title = '';

					if (aElements[i].className.indexOf("msHover") > -1) {
						injectImageHover(aElements[i]);
					}
				break;
				case 'input':
				case 'textarea':
					if ( (aElements[i].className.indexOf("msHover") > -1) && (aElements[i].type == 'image') ) {
						injectImageHover(aElements[i]);
					}

					if ( (aElements[i].className.indexOf("hintTxt_") > -1) && ( (aElements[i].type == 'text') || (aElements[i].type == 'textarea') ) ) {
						var txtValue = String(aElements[i].className.match(/hintTxt_(.*)_/gi));
						txtValue = txtValue.replace(/hintTxt_(.*)_/gi, "$1");

						injectObjEvent(aElements[i], 'onfocus', 'hintTxtFocus(this, "'+txtValue+'")');
						injectObjEvent(aElements[i], 'onblur', 'hintTxtBlur(this, "'+txtValue+'")');

						if ( (aElements[i].value == '') || (aElements[i].value == txtValue) ) {
							$(aElements[i]).addClass('hint');
							aElements[i].value = txtValue;
						}

						aHintFields[aHintFields.length] = new Array(aElements[i], txtValue);

						bLoadInputFieldJS = true;
					}
					if (aElements[i].className.indexOf("syncInput") > -1) {
						var sParams = String(aElements[i].className.match(/syncInput_(.*)_(.*)_/gi));
						sSource = sParams.replace(/syncInput_(.*)_(.*)_/gi, "$1");
						sTarget = sParams.replace(/syncInput_(.*?)_(.*?)_/gi, "$2");
						injectObjEvent(aElements[i], 'onkeyup', 'synchronizeInput("'+sSource+'", "'+sTarget+'")');
						injectObjEvent(aElements[i], 'onblur', 'synchronizeInput("'+sSource+'", "'+sTarget+'")');
					}
					if (!bDisableAutoTabindex) {
						if (aElements[i].type != 'hidden') {
							aElements[i].tabindex = nTabIndex++;
						}
					}
				break;
				case 'select':
					if (!bDisableAutoTabindex) { aElements[i].tabindex = nTabIndex++; }
					if (aElements[i].className.indexOf("bandwithSwitch") > -1) {
						var sFunction = 'if (typeof switchBandwith == "function") switchBandwith(this);';
						addEvent(aElements[i], 'onchange', sFunction);
						switchBandwith(aElements[i]);
					}
				break;
				case 'textarea':
					if (!bDisableAutoTabindex) { aElements[i].tabindex = nTabIndex++; }
				break;
				case 'form':
					var sFunction = 'if (typeof cleanDefaultHintValues == "function") cleanDefaultHintValues(aHintFields);';
					addEvent(aElements[i], 'onsubmit', sFunction, 'cleanDefaultHintValues(aHintFields)');
					var sFunction = 'if (typeof disableCancelPopup == "function") disableCancelPopup();';
					addEvent(aElements[i], 'onsubmit', sFunction, 'disableCancelPopup()');

					if (aElements[i].className.indexOf("ignoreErrors") > -1) {
						bIgnoreErrors = true;
					}
				break;
				case 'a':

					var sFunction = 'this.blur();';
					addEvent(aElements[i], 'onfocus', sFunction);

					if (bLoadCancelPopupJS) {
						var sFunction = 'if (typeof disableCancelPopup == "function") disableCancelPopup();';
						addEvent(aElements[i], 'onclick', sFunction, 'disableCancelPopup()');
					}

					if (aElements[i].className.indexOf("popupLink") > -1) {
						var sFunction = 'if (typeof openPopup == "function") return openPopup(this); else return true;';
						addEvent(aElements[i], 'onclick', sFunction);
						bLoadPopupJS = true;
					}

				break;
				case 'p':
 				default:
				break;
			}

			/* Execute Custon Javascriptfunction */
			if (aElements[i].className.indexOf("execFN_") > -1) {
				var sParams = String(aElements[i].className.match(/execFN_(.*)_(.*)_/gi));
				sEvent = sParams.replace(/execFN_(.*)_(.*)_/gi, "$1");
				sFuncName = sParams.replace(/execFN_(.*?)_(.*?)_/gi, "$2");
				if (sFuncName.indexOf("(") > -1) {
					sFuncParams = ',' + sFuncName.replace(/(.*?)\((.*?)\)/gi, "$2");
					sFuncName = sFuncName.replace(/(.*?)\((.*?)\)/gi, "$1");
				} else sFuncParams = '';  

				var sFunction = 'if (typeof '+sFuncName+' == "function") return '+sFuncName+'(this' + sFuncParams + '); else return true;';
				addEvent(aElements[i], sEvent, sFunction);
			}

		}

		if (bLoadPopupJS)			aJSLibraries[sBasePathOverride + '/arcor-gen-popup.js']			= new Array(false, false);
		if (bLoadInputFieldJS)		aJSLibraries[sBasePathOverride + '/arcor-gen-forminput.js']		= new Array(false, false);
		if (bLoadCancelPopupJS)		aJSLibraries[sBasePathOverride + '/arcor-gen-cancelpopup.js']	= new Array(false, false);
		if (bGenerateDebugOutput)	aJSLibraries[sBasePathOverride + '/arcor-gen-debug.js']			= new Array(false, false);

	}
}


/**
 *	initShadow()
 */
function initShadow() {
	try {
		$("img.shadow,input.shadow").each(function(){
			var sMask = this.src.replace(/(.*)(-no|-ms|-akt).(gif|jpg|png)/, "$1-mask.gif");
			$(this).css('background', 'transparent url(' + sMask + ') no-repeat 0 0');
		});
		$(".shadow").dropShadow({
			left: 4,
			top: 4,
			blur: 5,
			opacity: 0.35
		});
	} catch (e) {}
}


/**
 *	initPage()
 */
function initPage() {
	if (typeof preCustomInitialisations == "function") preCustomInitialisations();

	parseDomTree();

	for (i in aJSLibraries) {	// load additional JS
		loadExternalScript(i);
		aJSLibraries[i][0] = true;
	}

	if (typeof postCustomInitialisations == "function") postCustomInitialisations();

	if (typeof navigator !== 'undefined' && typeof navigator.userAgent !== 'undefined') {
		// Firefox 2 Fixes
		if (navigator.userAgent.search('Firefox/2') > -1) {
			$('.buttonForm .background').each(function(index, el) {
				$(el).css({display: 'block'});
			});
			$('.buttonLink .btnContent').each(function(index, el) {
				$(el).css({'padding-top': '4px'});
			});
			
			$('.reiterBox label').each(function(index, el) {
				$(el).css({'padding-bottom': '6px', 'padding-top': '6px'});
			});
			$('#content .kdtnContent span.customerTelephoneLineAreaCode').each(function(index, el) {
				$(el).css({display: 'block', float: 'left'});
			});
			
		}
	}

	preloadMSOverImages();
}
