﻿/*****************************************************/
/*                                                    */
/* Copyright (C) 2006-2009 Tomas Hnilica                   */                                                   
/******************************************************/

///////////////////////////////////////////////////////// 
// Common Flexiweb scripts
///////////////////////////////////////////////////////// 


function str_replace(srch, need, subj){
	var re = new RegExp (srch, 'gi') ;
	var newstr = subj.replace(re, need) ;
	return newstr;
}


function url_decode(subj){
	
	subj = " "+subj;
	subj = str_replace("&nbsp;"," ",subj);
	subj = str_replace("&lt;","<",subj);
	subj = str_replace("&gt;",">",subj);
	subj = str_replace("&amp;","&",subj);
	subj = str_replace("\"","&quot;",subj);
	
	subj = str_replace("&copy;","©",subj);
	subj = str_replace("&reg;","®",subj);
	
	return subj;
}

function trim(inputString) {
   // Removes leading and trailing spaces from the passed string. Also removes
   // consecutive spaces and replaces it with one space. If something besides
   // a string is passed in (null, custom object, etc.) then return the input.
   if (typeof inputString != "string") { return inputString; }
   var retValue = inputString;
   var ch = retValue.substring(0, 1);
   while (ch == " ") { // Check for spaces at the beginning of the string
      retValue = retValue.substring(1, retValue.length);
      ch = retValue.substring(0, 1);
   }
   ch = retValue.substring(retValue.length-1, retValue.length);
   while (ch == " ") { // Check for spaces at the end of the string
      retValue = retValue.substring(0, retValue.length-1);
      ch = retValue.substring(retValue.length-1, retValue.length);
   }
   while (retValue.indexOf("  ") != -1) { // Note that there are two spaces in the string - look for multiple spaces within the string
      retValue = retValue.substring(0, retValue.indexOf("  ")) + retValue.substring(retValue.indexOf("  ")+1, retValue.length); // Again, there are two spaces in each of the strings
   }
   return retValue; // Return the trimmed string back to the user
} // Ends the "trim" function


/*
JavaScript gate to the web services of the server.
Interface: 
Input: gate: public/user, method name, querystring of formatted parameters (key=value&key2=value2)
Return: message from the server.
*/
function fxWebServices(gate, method, querystring) {
	var ret = fxWebServicesXML(gate, method,querystring);
	return ret;
	/*
	var rootNode = xmldoc.getElementsByTagName("result")[0];
	var ret = rootNode.getAttribute("result");
	return ret;
	*/
}

/*
Extended JavaScript interface to the web services. 
Same as fxWebServices, but returns full XML response from the server.
*/
function fxWebServicesXML(gate, methodName, querystring) {
	qs = querystring;
 
 	if (gate == "public") var link = FX_WEBROOT + "/index.php/public/ws.php?method="+methodName+"&"+qs+"&rnd="+Math.random();
 	if (gate == "user") var link = FX_WEBROOT + "/user/index.php/user/ws.php?method="+methodName+"&"+qs+"&rnd="+Math.random();

	
	var return_value= $.ajax({ type: "GET", url: link, async: false, dataType: "xml" }).responseXML;
	var result = $(return_value).find('result').attr('result');
	return result;
	
	/*
	var xmlhttp = new XMLHttpRequest();
	xmlhttp.open("GET", link, false);
	xmlhttp.send(null);
	
	var xmldoc = Sarissa.getDomDocument();
	xmlString = new XMLSerializer().serializeToString(xmlhttp.responseXML);   
	xmldoc = (new DOMParser()).parseFromString(xmlString, "text/xml");   
	
	return xmldoc;
	*/
}




function explode(delimiter,item) {
	tempArray=new Array(1);
	var Count=0;
	var tempString=new String(item);
	while (tempString.indexOf(delimiter)>0) {
	tempArray[Count]=tempString.substr(0,tempString.indexOf(delimiter));
	tempString=tempString.substr(tempString.indexOf(delimiter)+1,tempString.length-tempString.indexOf(delimiter)+1); 
	Count=Count+1
	}
	tempArray[Count]=tempString;
	return tempArray;
}

function checkSeoShopKey(id,val) {
	val = urlencode(val);
 	var link = FX_WEBROOT + "/index.php/public/ws.php?method=checkSeoShopKey&p_id=" + id + "&key="+val+"&rnd="+Math.random();
	
	var xmldoc = $.ajax({ type: "GET", url: link, async: false, dataType: "xml" }).responseXML;
	var result = $(xmldoc).find('seokey').attr('result');
	return result;
	/*
	var xmlhttp = new XMLHttpRequest();
	xmlhttp.open("GET", link, false);
	xmlhttp.send(null);

	var xmldoc = Sarissa.getDomDocument();
	xmlString = new XMLSerializer().serializeToString(xmlhttp.responseXML);   
	xmldoc = (new DOMParser()).parseFromString(xmlString, "text/xml");   

	var rootNode = xmldoc.getElementsByTagName("seokey")[0];
	var ret = rootNode.getAttribute("result");
	return ret;
	*/
}


function checkSeoKey(id, lang, val) {
	val = urlencode(val);
 	var link = FX_WEBROOT + "/index.php/public/ws.php?method=checkSeoKey&menu_id=" + id + "&l=" + lang + "&val="+val+"&rnd="+Math.random();

	var xmldoc = $.ajax({ type: "GET", url: link, async: false, dataType: "xml" }).responseXML;
	var result = $(xmldoc).find('result').attr('result');
	return result;

	/*
	var xmlhttp = new XMLHttpRequest();
	xmlhttp.open("GET", link, false);
	xmlhttp.send(null);

	var xmldoc = Sarissa.getDomDocument();
	xmlString = new XMLSerializer().serializeToString(xmlhttp.responseXML);   
	xmldoc = (new DOMParser()).parseFromString(xmlString, "text/xml");   

	var rootNode = xmldoc.getElementsByTagName("result")[0];
	var ret = rootNode.getAttribute("result");
	return ret;
	*/
}

function cleanMSwordCode(code) {
 	var link = FX_WEBROOT + "/index.php/public/ws.php?method=cleanMSword&rnd="+Math.random();

	var xmldoc = $.ajax({
	  	 type: "POST",
	 	  url: link,
	 	  data: ({src : code}),
	 	  async: false
	 	}).responseXML;
	var ret = $(xmldoc).find('cleantext').text();
	return ret;
	/*
	var xmlhttp = new XMLHttpRequest();
	xmlhttp.open("POST", link, false);
	xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	code = urlencode(code);
	xmlhttp.send('src=' + code);

	var xmldoc = Sarissa.getDomDocument();
	xmlString = new XMLSerializer().serializeToString(xmlhttp.responseXML);   
	xmldoc = (new DOMParser()).parseFromString(xmlString, "text/xml");   

	var rootNode = xmldoc.getElementsByTagName("cleantext")[0];
	var ret = rootNode.childNodes[0].nodeValue;

	return ret;
	*/
}

function saveSeoKey(id, lang, val) {
 	var link = FX_WEBROOT + "/index.php/public/ws.php?method=saveSeoKey&menu_id=" + id + "&l=" + lang + "&val="+val+"&rnd="+Math.random();

	var xmldoc = $.ajax({ type: "GET", url: link, async: false, dataType: "xml" }).responseXML;
	var result = $(xmldoc).find('seokey').attr('result');
	return result;

	/*
	var xmlhttp = new XMLHttpRequest();
	xmlhttp.open("GET", link, false);
	xmlhttp.send(null);

	var xmldoc = Sarissa.getDomDocument();
	xmlString = new XMLSerializer().serializeToString(xmlhttp.responseXML);   
	xmldoc = (new DOMParser()).parseFromString(xmlString, "text/xml");   

	var rootNode = xmldoc.getElementsByTagName("seokey")[0];
	var ret = rootNode.getAttribute("result");
	return ret;
	*/
}




function urlencode( str ) {
    // URL-encodes string
    // 
    // +    discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_urlencode/
    // +       version: 901.1411
    // +   original by: Philip Peterson
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: AJ
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Brett Zamir
    // %          note: info on what encoding functions to use from: http://xkr.us/articles/javascript/encode-compare/
    // *     example 1: urlencode('Kevin van Zonneveld!');
    // *     returns 1: 'Kevin+van+Zonneveld%21'
    // *     example 2: urlencode('http://kevin.vanzonneveld.net/');
    // *     returns 2: 'http%3A%2F%2Fkevin.vanzonneveld.net%2F'
    // *     example 3: urlencode('http://www.google.nl/search?q=php.js&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:en-US:unofficial&client=firefox-a');
    // *     returns 3: 'http%3A%2F%2Fwww.google.nl%2Fsearch%3Fq%3Dphp.js%26ie%3Dutf-8%26oe%3Dutf-8%26aq%3Dt%26rls%3Dcom.ubuntu%3Aen-US%3Aunofficial%26client%3Dfirefox-a'
                             
    var histogram = {}, tmp_arr = [];
    var ret = str.toString();
    
    var replacer = function(search, replace, str) {
        var tmp_arr = [];
        tmp_arr = str.split(search);
        return tmp_arr.join(replace);
    };
    
    // The histogram is identical to the one in urldecode.
    histogram["'"]   = '%27';
    histogram['(']   = '%28';
    histogram[')']   = '%29';
    histogram['*']   = '%2A';
    histogram['~']   = '%7E';
    histogram['!']   = '%21';
    histogram['%20'] = '+';
    
    // Begin with encodeURIComponent, which most resembles PHP's encoding functions
    ret = encodeURIComponent(ret);
    
    for (search in histogram) {
        replace = histogram[search];
        ret = replacer(search, replace, ret) // Custom replace. No regexing
    }
    
    // Uppercase for full PHP compatibility
    return ret.replace(/(\%([a-z0-9]{2}))/g, function(full, m1, m2) {
        return "%"+m2.toUpperCase();
    });
    
    return ret;
}
    
function windowHeight() {
  var myWidth = 0, myHeight = 0;
  if( typeof( window.innerWidth ) == 'number' ) {
    //Non-IE
    myWidth = window.innerWidth;
    myHeight = window.innerHeight;
  } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
    //IE 6+ in 'standards compliant mode'
    myWidth = document.documentElement.clientWidth;
    myHeight = document.documentElement.clientHeight;
  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
    //IE 4 compatible
    myWidth = document.body.clientWidth;
    myHeight = document.body.clientHeight;
  }
  return myHeight;
}

function windowWidth() {
  var myWidth = 0, myHeight = 0;
  if( typeof( window.innerWidth ) == 'number' ) {
    //Non-IE
    myWidth = window.innerWidth;
    myHeight = window.innerHeight;
  } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
    //IE 6+ in 'standards compliant mode'
    myWidth = document.documentElement.clientWidth;
    myHeight = document.documentElement.clientHeight;
  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
    //IE 4 compatible
    myWidth = document.body.clientWidth;
    myHeight = document.body.clientHeight;
  }
  return myWidth;
}

function urlize(str) {
  //to lowercase
  str = str.toLowerCase();
  
  //replace czech characters (more can be added)
  str = str_replace("ě","e",str);
  str = str_replace("š","s",str);
  str = str_replace("č","c",str);
  str = str_replace("ř","r",str);
  str = str_replace("ž","z",str);
  str = str_replace("ý","y",str);
  str = str_replace("á","a",str);
  str = str_replace("í","i",str);
  str = str_replace("é","e",str);
  str = str_replace("ú","u",str);
  str = str_replace("ů","u",str);
  str = str_replace("ó","o",str);
  str = str_replace("ď","d",str);
  str = str_replace("ť","t",str);
  str = str_replace("ň","n",str);
  
  
  //special chars replacement
  str = str_replace("<br>","-",str);
  str = str_replace(" ","-",str);
  str = str_replace("&","-",str);
  str = str_replace(",","-",str);

  str = str_replace("--","-",str);
  
   
   //get rid of non ASCII chars
   var ret = "";
   var i;
   for (i=0;i<=str.length-1;i++){
		
		n = str.charCodeAt(i);
		if ((n>47 && n<58) ||  (n>64 && n<91) || (n>96 && n<123) || n == 95) ret+=str.charAt(i);
		else ret+="-";

   }
   str = ret;

  str = str_replace("--","-",str);
  str = str_replace("--","-",str);
  str = str_replace("--","-",str);
  str = str_replace("--","-",str);
  str = str_replace("--","-",str);

  
  str = trim(str);
  if (str == "-") str = "";
  return str;
}

///////////////////////////////////////////////////////// 
// ESHOP variants JS object
///////////////////////////////////////////////////////// 
/*Constructor, string representation as parameter*/
function Variants(s) {
  try {
    this.data = $.evalJSON(s);
  } catch(e) {this.data = new Object();}
 
};
Variants.prototype.size = function() {
     var i = 0;
     for (var z in this.data) i++;
     return i;
};

Variants.prototype.readFromString = function(s){
	this.data = s;
};
Variants.prototype.writeAsString = function() {
	return $.toJSON(this.data);
};

Variants.prototype.addVariant = function(v) {
	this.data[v] = new Array();
} 
Variants.prototype.removeVariant = function(v) {
	try {
	   delete this.data[v];
	} catch(e) {;}
}
Variants.prototype.addOption = function(variant, value) {
	var l = this.data[variant].length
	this.data[variant][l] = value;
}
			
Variants.prototype.putToDiv = function(d) {
	 var head = "";
	 var cont = "";
	 for (var z in this.data) {
	 	head += "<td><a href='javascript:removeVariant(\""+z+"\")'>"+ this.minusCode +"</a>"+z+"</td>";
	 	cont += "<td><textarea rows='10' cols='30' id='variant_"+z+"'>";
	 	for (var i=0; i< this.data[z].length; i++) cont+= this.data[z][i] + "\n";
	 	cont += "</textarea></td>";
	 }
	 r = "<table><tr>"+head+"</tr><tr>"+cont+"</tr></table>";
	d.innerHTML = r;
}
Variants.prototype.collectFromDiv = function(d) {
	for (var z in this.data) {
		t = document.getElementById("variant_" + z);
		if (t) {
		   this.data[z] = [];
		   var vals = t.value.split("\n");
		   for (var i=0; i<vals.length; i++) {
		   	 vals[i] = str_replace("\n","",vals[i]);
		   	 vals[i] = str_replace("\r","",vals[i]);
		   	 if (vals[i] != "") this.addOption(z,vals[i]);
		   }
		}
	}
}
Variants.prototype.updateDiv = function(d) {
	this.collectFromDiv(d);
	this.putToDiv(d);
}

