/* Copyright (c) WEBSALE AG 2010
 * Diese Software ist kommerziell und unterliegt der Lizenzpflicht.
 * Benutzung und Weitergabe nur mit Genehmigung und mit Lizenz der WEBSALE AG.
 *
 * Copyright (c) WEBSALE AG 2010
 * This software is to be licensed.
 * Use or distribution only with expressed permission and with license of WEBSALE AG.
 */

//////////////////////////////////////////////////////////////////////////////////////////
//                                                                                      //
//    Designspezifische Funktionen fuer WEBSALE eCommerce                               //
//                                                                                      //
//////////////////////////////////////////////////////////////////////////////////////////



//////////////////////////////////////////////////////////////////////////////////////////
//	Allgemeine: "verfügbare Zeichen einer Textarea anzeigen"                        //
//////////////////////////////////////////////////////////////////////////////////////////
//
//	Mit folgender Funktion können Sie die restlichen verfügbaren Zeichen
//	einer Textarea anzeigen lassen:
//	ws_registerLimitTextarea(textareaid, maxlength, infodiv, infostring_signsleft, infostring_nosignsleft)
//		textareaid:		Die ID der Textarea
//		maxlength:		Die maximale Anzahl an Zeichen
//		infodiv:		Die ID des DIV-Containers in der die verfügbare Menge an Zeichen angezeigt wird
//		infostring_signsleft:	Dieser Text wird angezeigt wenn noch Zeichen zur Verfügung stehen. Das Tag ~WSJS-Signs~ wird durch die verfügbare Anzahl an Zeichen ersetzt.
//		infostring_nosignsleft:	Dieser Text wird angezeigt wenn keine Zeichen mehr zur Verfügung stehen. Das Tag ~WSJS-Signs~ wird durch die maximale Anzahl an Zeichen ersetzt.
//
//	Rufen Sie diese Funktion entweder in der Funktion $(document).ready oder an einer beliebigen Stelle im Template auf



//////////////////////////////////////////////////////////////////////////////////////////
//    Allgemein: "DIV-Container bei aktiviertem Javascript einblenden"                  //
//////////////////////////////////////////////////////////////////////////////////////////

//Alle DIV-Container mit dieser Klasse werden nachdem die Seite gealden ist automatisch eingeblendet
//Die DIV-Container muessen dabei den style "display: none" besitzen
var ws_JSOnlyClass = 'javascript_only';



//////////////////////////////////////////////////////////////////////////////////////////
//    Modul: "Produktvergleich"                                                         //
//////////////////////////////////////////////////////////////////////////////////////////
//Anhand der nachfolgenden Parameter laesst sich das Verhalten des Produktvergleichs konfigurieren

//Der DIV-Container in dem der Inhalt des Layers (Produktvergleich) angezeigt wird (Kategorie/Produkt)
var ws_PRCAjaxDivContent = 'PC-Content';

//Der Klassenname der Links zum Anzeigen des Produktvergleichs 
//dieser DIV-Container muss einmal auf jedem Template vorhanden sein auf dem der Produktvergleich angezeigt wird.
var ws_PRCShowProductCompareClass = 'PRC-Show';

//Der DIV-Container mit dieser ID wird eingeblendet wenn eine Hinweismeldungen angezeigt wird, z.B. wenn keine weiteren Produkte zum Produktvergleich hinzugefuegt werden koennen (Kategorie)
var ws_PRCAlertDiv = 'PC-Alert';
//In den DIV-Container mit dieser ID wird der Hinweistext eingefuegt (Kategorie)
var ws_PRCAlertTextDiv = 'PC-Alert-Message';

//Ist dieser Schalter auf true gesetzt wird der Inhalt des Produktvergleichs per JavaScript um 90 Grad gedreht
var ws_PRCRotate = true;
//Anfang und Endekennungen der Daten- und Template-Sektion im Template welches per AJAX zurueckgegeben wird
var ws_PRCRotateDataBegin = '<data>';
var ws_PRCRotateDataEnd = '</data>';
var ws_PRCRotateTemplateBegin = '<template>';
var ws_PRCRotateTemplateEnd = '</template>';
//Feld- und Datensatztrenner der Datensektion
var ws_PRCRotateDataFieldSeparator = '<df>';
var ws_PRCRotateDataRowSeparator = '<dr>';
//Konfiguration der Ausgabetabelle
var ws_PRCRotateTableClass = 'PRC-Table';
var ws_PRCRotateTableID = 'PRC-Table';
var ws_PRCRotateTableTRClasses = [ 'PRC-TR1', 'PRC-TR2' ];                         //Array mit beliebiger Anzahl an Klassen
var ws_PRCRotateTableTDHeaderClasses = [ 'PRC-TDHeader1', 'PRC-TDHeader2' ];       //Array mit beliebiger Anzahl an Klassen
var ws_PRCRotateTableTDClasses = [ 'PRC-TD1', 'PRC-TD2' ];                         //Array mit beliebiger Anzahl an Klassen
var ws_PRCRotateTableTDClassesAlternateVertical = true;
var ws_PRCRotateTemplateReplaceTag = '#####REPLACE#####';



//////////////////////////////////////////////////////////////////////////////////////////
//    Modul: "Produkte per AJAX in den Warenkorb legen"                                 //
//////////////////////////////////////////////////////////////////////////////////////////
 
//Diese Funktion wird aufgerufen bevor die AJAX-Anfrage abgesetzt wird.
//Mit dieser Funktion ist zum Beispiel eine Ladeanzeige realisierbar
function ws_AJAXaddToBasketStart()
{
       //Blendet die Fehler- und Infocontainer aus sowie den Ladecontainer ein
       $('#AJAXError').hide();
       $('#WK-Error').fadeOut("slow");
       $('#AJAXInfo').fadeIn("slow");
}
 
//Diese Funktion wird aufgerufen wenn Produkt(e) in den Warenkorb gelegt werden konnten
//Mit dieser Funktion ist die Erfolgsmeldung realisierbar
function ws_AJAXaddToBasketResponseSuccess()
{
       //Blendet den Ladecontainer aus
       $('#AJAXInfo').fadeOut("slow");
       //Der Container mit der Information wieviele Artikel in den WK gelegt wurden wird angezeigt, dieser Container wird nach 3 Sekunden wieder ausgeblendet
       $('#WK-Info').fadeIn("slow");
       window.setTimeout("$('#WK-Info').fadeOut('slow')", 3000);
	   //Der Markierungscontainer im Kurzwarenkorb blinkt 3 mal au
       window.setTimeout("$('#WK-Alert').fadeIn(500).fadeOut(500).fadeIn(500).fadeOut(500).fadeIn(500).fadeOut(500)", 100);
}
 
//Diese Funktino wird aufgerufen wenn mindestens ein Artikel nicht in den Warenkorb gelegt werden konnte
//Mit dieser Funktion laesst sich die von WEBSALE eCommerce erzeugte Fehlermeldung ausgeben
function ws_AJAXaddToBasketResponseError()
{
       //Blendet den Ladecontainer aus und die Hinweismeldung ein
       $('#AJAXInfo').fadeOut("slow");
       $('#WK-Error').fadeIn("slow");
}
 
//Diese Funktion wird aufgerufen wenn die AJAX-Kommunikatino fehlschlug
//Mit dieser Funktion laesst sich ein allgemeiner Kommunikationsfehler (z.B. wenn die Internetverbindung unterbrochen wurde) anzeigen
function ws_AJAXaddToBasketError()
{
       //Blendet den Ladecontainer aus und den AJAX-Fehlercontainer ein
       $('#AJAXInfo').fadeOut();
       $('#AJAXError').fadeIn();
}




//Funktion holt den Parameter mit dem Namen x aus dem Query-String
function gup( name )
{
       name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
       var regexS = "[\\?&]"+name+"=([^&#]*)";
       var regex = new RegExp( regexS );
       var results = regex.exec( window.location.href );
       if( results == null )
               return "";
       else
               return decodeURIComponent(results[1]);
} 











//////////////////////////////////////////////////////////////////////////////////////////
//    Funktion: Mehrfachbilder						                                //
//////////////////////////////////////////////////////////////////////////////////////////




//Version 1.2, unterstützt jqzoom (WEBSALE Variante)

//ausgelagertes Skript
var picIndex = 0; //Aktueller Index

//Gibt das Bild mit der Next-Schaltfläche aus, Teil der API
function showNextPic(src,style)
{
	showClickPic(0,src,style);
}

//Gibt das Bild mit der Prev-Schaltfläche aus, Teil der API
function showPreviousPic(src,style)
{
	showClickPic(1,src,style);
}

//Gibt ein Bild aus, Next oder Prev, nicht Teil der API
function showClickPic(type,src,style)
{
  var counter;
  var show;

  if (src == null)
	return;

  //Prüfen ob mindestens zwei Bilder vorhanden
  show = false;
  counter = 0;
  for (var i = 0;; i++)
  {
	if (counter >= 2)
	{
		show = true;
		break;
	}
	if (i >= bigPix.length)
		break;
	if (i >= smallPix.length)
		break;

	if (bigPix[i].length > 0 && smallPix[i].length > 0)
		counter++;
  }

  if (show == false)
	return;

  //Link ausgeben
  document.write('<img ');
  if (type == 0)
  	document.write('onClick="return setNextPic();" ');
  else
	document.write('onClick="return setPrevPic();" ');
  document.write('src="');
  //Shop-URL voranstellen wenn gesetzt und link nicht absolut ist
  if (URLShop.length > 0 && checkAbsoluteAddress(src) == false )
  {
    document.write(URLShop);
    document.write('/');
  }
  document.write(src);
  document.write('" ');
  if (style)
    document.write(style);
  document.write('>&nbsp;'); 
}

//Gibt das Kleinbild mit dem Index und Style aus, Teil der API
function showSmallPic(index,style)
{
  //Index verschieben
  var i = index - 1;
  
  //Bei nur einem Bild ausblenden
  if (bigPix.length <= 1)
    return;
  if (bigPix[1].length == 0)
    return;
  if (smallPix.length <= 1)
    return;
  if (smallPix[1].length == 0)
    return;

  //Grenzen checken
  if (i < 0)
    return;    
  if (i >= smallPix.length)
    return;
  if (i >= bigPix.length)
    return;
  if (smallPix[i].length == 0)
    return;
  if(bigPix[i].length == 0)
    return;
    
  //Link ausgeben
  document.write('<img ');
  document.write('onClick="return setBigPic(');
  document.write(i);
  document.write(');" ');
  document.write('src="');
  //Shop-URL voranstellen wenn gesetzt und link nicht absolut ist
  if (URLShop.length > 0 && checkAbsoluteAddress(smallPix[i]) == false )
  {
    document.write(URLShop);
    document.write('/');
  }
  document.write(smallPix[i]);
  document.write('" ');
  if (style)
    document.write(style);
  document.write('>'); 
}

//Setzt das Hauptbild, nicht benötigt in API
function setBigPic(index)
{
  var URLpreFix = "";

  //Grenzen checken
  if (index < 0)
    return;    
  if (index >= bigPix.length)
    return;

  //Index merken für popupBig
  picIndex = index;

  //Komplette URL basteln, Shop-URL voranstellen wenn gesetzt und link nicht absolut ist
  if (URLShop.length > 0 && checkAbsoluteAddress(bigPix[index]) == false)
    URLpreFix = URLShop + "/";

  //Element holen und setzen
  document.images[bigPicName].src = URLpreFix + bigPix[index];

  //JQZoom-Unterstützung
  if (jqzoomPix != null)
  {
	var cURL = "";
	if (jqzoomPix[index] != null)
	{
		if (jqzoomPix[index] != "")
			cURL = URLpreFix + jqzoomPix[index];		
	}
  	document.images[bigPicName].setAttribute("jqimg",cURL); //Für den jqzoom
  }
}

//Erzeugt das Hauptbild, Teil der API
function showBigPic(style)
{ 
  var URLpreFix = "";

  //Erstes Bild ausgeben, wenn nichts vorhanden nichts ausgeben
  if (bigPix.length == 0)
    return;
  
  //Initial auf 0 stellen
  picIndex = 0;
  
  //Einlesen des Parameters falls vorhanden über window.location.search
  var paramString = window.location.search;
  //Parameter suchen...
  var positionIndex = paramString.lastIndexOf(bigPicParamName + "=");
  if (positionIndex > 0)
  {    
    
    //Parameter extrahieren
    var parameter = paramString.substr(positionIndex + bigPicParamName.length + 1);
    if (!parameter)
      return;
    
    //Bis Ende gehen
    var endIndex = parameter.indexOf("&");
    if (endIndex > 0)
      paramString = parameter.substr(0,endIndex);
    else
      paramString = parameter;
    
    //Endlich gefunden, also setzen
    endIndex = parseInt(paramString);
   
    if (endIndex < bigPix.length)
      picIndex = endIndex;
  }
  
  //Link setzen
  if (popupLocation.length != 0)
  	document.write('<a href="javascript:popupBig();">');
  document.write('<img name=' + bigPicName + ' src="');
  //Shop-URL voranstellen wenn gesetzt und link nicht absolut ist  
 if (URLShop.length > 0 && checkAbsoluteAddress(bigPix[picIndex]) == false)
    URLpreFix = URLShop + "/";
  document.write(URLpreFix + bigPix[picIndex] + '"');
  if (style)
    document.write(' ' + style);  
  //JQZoom unterstützen
  if (jqzoomPix != null)
  {
	var cURL = "";
	if (jqzoomPix[picIndex] != null)
	{
		if (jqzoomPix[picIndex] != "")
			cURL = URLpreFix + jqzoomPix[picIndex];		
	}
	document.write(' jqimg="'+cURL+'"');  	
  }  
  document.write('>');
  if (popupLocation.length != 0)
  	document.write('</a>');
}

//Erzeugt das Popup, nicht benötigt in der API
function popupBig()
{
  var spacer = '&';
  if (popupLocation.indexOf("?") == -1)
    spacer = '?';

  if (popupLocation.length == 0)
    return;
  
  //Hier den Parameter mitgeben, und auch den restlichen Popupschlonz...
  //ab dem ? bitte URL-Codieren
  var address = popupLocation + spacer + bigPicParamName + '=' + picIndex;
  encodeURI(address);
  //Und popup
  var mywin=window.open(address,popupName,popupOptions);
  mywin.focus();
}

function checkAbsoluteAddress(string)
{
  var ret = false;
  //Prüfen /
  if (string.charAt(0) == "/")
    ret = true;
  //Prüfen http
  else if (string.charAt(0) == "h" && string.charAt(1) == "t" && string.charAt(2) == "t" && string.charAt(3) == "p")
    ret = true;    
  
  return ret;
}

//Schaltet auf das nächste Bild, nicht Teil der API
function setNextPic()
{
	var found = false;	

	//Nächstes Bild suchen
	for (var i = picIndex + 1;;i++)
	{
		if (i >= bigPix.length)
			break;
		if (i >= smallPix.length)
			break;

		if (bigPix[i].length > 0 && smallPix[i].length > 0)
		{
			found = true;
			break;
		}			
	}	
	if (found == true)
	{
		setBigPic(i);
		return;
	}

	//Nächstes Bild von vorne suchen
	for (var i = 0; i < picIndex; i++)
	{		
		if (i >= bigPix.length)
			break;
		if (i >= smallPix.length)
			break;

		if (bigPix[i].length > 0 && smallPix[i].length > 0)
		{
			found = true;
			break;
		}			
	}	
	if (found == true)
	{
		setBigPic(i);
		return;
	}

}

//Schaltet auf das vorherige Bild, nicht Teil der API
function setPrevPic()
{
	var found = false;	
	var i;

	//Vorheriges Bild suchen
	for (i = picIndex - 1; i >= 0; i--)
	{		
		if (i >= bigPix.length)
			continue;
		if (i >= smallPix.length)
			continue;
	
		if (bigPix[i].length > 0 && smallPix[i].length > 0)
		{
			found = true;
			break;
		}			
	}	
	if (found == true)
	{
		setBigPic(i);
		return;
	}

	//Vorheriges Bild von hinten suchen
	for (i = bigPix.length - 1; i > picIndex; i--)
	{			
		if (i >= smallPix.length)
			continue;

		if (bigPix[i].length > 0 && smallPix[i].length > 0)
		{
			found = true;
			break;
		}			
	}	
	if (found == true)
	{
		setBigPic(i);
		return;
	}
}
