/* 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();
}





//////////////////////////////////////////////////////////////////////////////////////////
//    JS für den ext. Newsletter (ist von Oboy selbst)									//
//////////////////////////////////////////////////////////////////////////////////////////

var dtCh='/';
var minYear=1900;
var maxYear=2100;
function isValidInteger(s){
var i;
for(i=0;i<s.length;i++){
var c=s.charAt(i);
if(((c<'0')||(c>'9'))) return false;
}
return true;
}
function stripCharsInBag(s,bag){
var i;
var returnString='';
for(i=0;i<s.length;i++){
var c=s.charAt(i);
if(bag.indexOf(c)==-1) returnString+=c;
}
return returnString;
}
function daysInFebruary(year){
return(((year%4==0)&&((!(year % 100 == 0))||(year%400==0)))?29:28);
}
function DaysArray(n){
for(var i=1;i<=n;i++){
this[i]=31;
if(i==4||i==6||i==9||i==11){this[i]=30;}
if(i==2){this[i]=29;}
}
return this;
}
function isDateOK(dtStr){
if(dtStr=='') return true;
var daysInMonth=DaysArray(12);
var pos1=dtStr.indexOf(dtCh);
var pos2=dtStr.indexOf(dtCh,pos1+1);
var strDay=dtStr.substring(0,pos1);
var strMonth=dtStr.substring(pos1+1,pos2);
var strYear=dtStr.substring(pos2+1);
strYr=strYear;
if(strDay.charAt(0)=='0'&&strDay.length>1) strDay=strDay.substring(1);
if(strMonth.charAt(0)=='0'&&strMonth.length>1) strMonth=strMonth.substring(1);
for(var i=1;i<=3;i++){
if(strYr.charAt(0)=='0'&&strYr.length>1) strYr=strYr.substring(1);
}
month=parseInt(strMonth);
day=parseInt(strDay);
year=parseInt(strYr);
if(pos1==-1||pos2==-1){
alert('The date format should be : dd/mm/yyyy.');
return false;
}
if(strMonth.length<1||month<1||month>12){
alert('Please enter a valid month.');
return false;
}
if(strDay.length<1||day<1||day>31||(month==2&&day>daysInFebruary(year))||day>daysInMonth[month]){
alert('Please enter a valid day.');
return false;
}
if(strYear.length!=4||year==0||year<minYear||year>maxYear){
alert('Please enter a valid 4 digit year between '+minYear+' and '+maxYear+'.');
return false;
}
if(dtStr.indexOf(dtCh,pos2+1)!=-1||isValidInteger(stripCharsInBag(dtStr,dtCh))==false){
alert('Please enter a valid date.');
return false;
}
return true;
}
function modifyDateFormat(dt){
var valuesTable=dt.value.split(dtCh);
dt.value=valuesTable[1]+dtCh+valuesTable[0]+dtCh+valuesTable[2];
}
function isEmail(emailAddress){
emailAddressValue=emailAddress.value.toLowerCase();
var countryTLDs=/^(ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cat|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)$/;
var gTLDs=/^(aero|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|jobs)$/;
var basicAddress=/^(.+)@(.+)$/;
var specialChars='\\(\\)><@,;:\\\\\\\"\\.\\[\\]';
var validChars='\[^\\s'+specialChars+'\]';
var validCharset='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\'-_.';
var quotedUser='(\"[^\"]*\")';
var atom=validChars+'+';
var word='('+atom+'|'+quotedUser+')';
var validUser=new RegExp('^'+word+'(\.'+word+')*$');
var symDomain=new RegExp('^'+atom+'(\.'+atom+')*$');
var matchArray=emailAddressValue.match(basicAddress);
if(emailAddress.value==''||emailAddress==null){
return true;
}
if(matchArray==null){
alert('The Email address doesn\'t seem to be correct,\nplease check syntax.');
emailAddress.focus();
return false;
}else{
var user=matchArray[1];
var domain=matchArray[2];
for(i=0;i<user.length;i++){
if(validCharset.indexOf(user.charAt(i))==-1){
alert('The Email address contains invalid characters,\nplease check the username.');
emailAddress.focus();
return false;
}
}
for(i=0;i<domain.length;i++){
if(validCharset.indexOf(domain.charAt(i))==-1){
alert('The Email address contains invalid characters,\nplease check the domain.');
emailAddress.focus();
return false;
}
}
if(user.match(validUser)==null){
alert('The Email address doesn\'t seem to be correct,\nplease check the username.');
emailAddress.focus();
return false;
}
var atomPat=new RegExp('^'+atom+'$');
var domArr=domain.split('.');
var len=domArr.length;
for(i=0;i<len;i++){
if(domArr[i].search(atomPat)==-1){
alert('The Email address doesn\'t seem to be correct,\nplease check the domain name.');
emailAddress.focus();
return false;
}
}
if((domArr[domArr.length-1].length==2)&&(domArr[domArr.length-1].search(countryTLDs)==-1)){
alert('The Email address doesn\'t seem to be correct,\nplease check domain suffix.');
emailAddress.focus();
return false;
}
if((domArr[domArr.length-1].length>2)&&(domArr[domArr.length-1].search(gTLDs)==-1)){
alert('The Email address doesn\'t seem to be correct,\nplease check domain suffix.');
emailAddress.focus();
return false;
}
if((domArr[domArr.length-1].length<2)||(domArr[domArr.length-1].length>6)){
alert('The Email address doesn\'t seem to be correct,\nplease check domain suffix.');
emailAddress.focus();
return false;
}
if(len<2){
alert('The Email address doesn\'t seem to be correct,\nplease check missing hostname.');
emailAddress.focus();
return false;
}
}
return true;
}
String.prototype.trim = function() { return this.replace(/^\s*(\b.*\b|)\s*$/, "$1");	}
function mandatoryText(input,fieldName){
if(input.value.trim()==''||input==null){
alert('Please enter your '+fieldName+'.');
input.focus();
return false;
} else {
return true;
}
}
function validForm(){
if(!mandatoryText(document.getElementById('EMAIL_FIELD'), 'Email')) return;
if(!isEmail(document.getElementById('EMAIL_FIELD'))) return;
if(!isDateOK(document.getElementById('DATEOFBIRTH_FIELD').value)) return;
if(document.getElementById('DATEOFBIRTH_FIELD').value!='') modifyDateFormat(document.getElementById('DATEOFBIRTH_FIELD'));
document.getElementById('emvForm').submit();
if(document.getElementById('DATEOFBIRTH_FIELD').value!='') modifyDateFormat(document.getElementById('DATEOFBIRTH_FIELD'));
}

//////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////



//////////////////////////////////////////////////////////////////////////////////////////
//    Navigation im Head				            									//
//////////////////////////////////////////////////////////////////////////////////////////

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}
function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

//////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////



//////////////////////////////////////////////////////////////////////////////////////////
//    Mehrfachbilder					            									//
//////////////////////////////////////////////////////////////////////////////////////////
//ausgelagertes Skript
var picIndex; //Aktueller Index

//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)
{
  //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)
    var cURL = URLShop + "/" + bigPix[index];
  else
    var cURL = bigPix[index];

  //Element holen und setzen
  document.images[bigPicName].src = cURL;
}

//Erzeugt das Hauptbild, Teil der API
function showBigPic(style)
{
  //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
  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)
    document.write(URLShop + '/');
  document.write(bigPix[picIndex] + '"');
  if (style)
    document.write(' ' + style);    
  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;
}


//////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////
