/*
	Listonic Buttons v 1.5 by Listonic Sp. z o.o. http://listonic.com
	
	Example:
	<script type="text/javascript">
		listonic_content='milk<br />bread';
		document.write("<iframe class='listonic_ifrm' frameborder='0' scrolling='no'> </iframe>");
	</script>
	<script type="text/javascript" src="http://buttons.listonic.pl/v1/button.js"></script>
	
	Parameters:
	listonic_content 	- shopping list items separated by <br /> - the only mandatory parameter
	listonic_url 		- referal url (set it up if different than url of webpage where Listonic button is)
	listonic_name 		- default name of shopping list
	listonic_theme 		- listonic button design name if different than default
	listonic_language 	- default is polish, possible values "pl_PL", "en_EN"
	listonic_icon 		- if list has only one item, url to icon of this item
	listonic_type 		- depreciated "fooddrink", "other", "diy"
	
	Based on third party works:
	 - Function: getElementsByClassName by Robert Nyman, http://www.robertnyman.com
	   Code/licensing: http://code.google.com/p/getelementsbyclassname/
	 - Unit PNG Fix for IE6 by Unit Interactive, http://labs.unitinteractive.com/unitpngfix.php on CC BY 3.0 license 
*/

if	(typeof(window[listonicFramesUsed])=='undefined')
	var listonicFramesUsed = 0;
	
if (typeof(getElementsByClassNameGfdhgft) == 'undefined')
	{
var getElementsByClassNameGfdhgft = function (className, tag, elm){
	if (document.getElementsByClassNameGfdhgft) {
		getElementsByClassNameGfdhgft = function (className, tag, elm) {
			elm = elm || document;
			var elements = elm.getElementsByClassNameGfdhgft(className),
				nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : null,
				returnElements = [],
				current;
			for(var i=0, il=elements.length; i<il; i+=1){
				current = elements[i];
				if(!nodeName || nodeName.test(current.nodeName)) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	else if (document.evaluate) {
		getElementsByClassNameGfdhgft = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = "",
				xhtmlNamespace = "http://www.w3.org/1999/xhtml",
				namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace : null,
				returnElements = [],
				elements,
				node;
			for(var j=0, jl=classes.length; j<jl; j+=1){
				classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]";
			}
			try	{
				elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null);
			}
			catch (e) {
				elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null);
			}
			while ((node = elements.iterateNext())) {
				returnElements.push(node);
			}
			return returnElements;
		};
	}
	else {
		getElementsByClassNameGfdhgft = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = [],
				elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag),
				current,
				returnElements = [],
				match;
			for(var k=0, kl=classes.length; k<kl; k+=1){
				classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)"));
			}
			for(var l=0, ll=elements.length; l<ll; l+=1){
				current = elements[l];
				match = false;
				for(var m=0, ml=classesToCheck.length; m<ml; m+=1){
					match = classesToCheck[m].test(current.className);
					if (!match) {
						break;
					}
				}
				if (match) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	return getElementsByClassNameGfdhgft(className, tag, elm);
};
	}	
	
	
	
	if (typeof(getElementsByClassName) == 'undefined')
	{
var getElementsByClassName = function (className, tag, elm){
	if (document.getElementsByClassName) {
		getElementsByClassName = function (className, tag, elm) {
			elm = elm || document;
			var elements = elm.getElementsByClassName(className),
				nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : null,
				returnElements = [],
				current;
			for(var i=0, il=elements.length; i<il; i+=1){
				current = elements[i];
				if(!nodeName || nodeName.test(current.nodeName)) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	else if (document.evaluate) {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = "",
				xhtmlNamespace = "http://www.w3.org/1999/xhtml",
				namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace : null,
				returnElements = [],
				elements,
				node;
			for(var j=0, jl=classes.length; j<jl; j+=1){
				classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]";
			}
			try	{
				elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null);
			}
			catch (e) {
				elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null);
			}
			while ((node = elements.iterateNext())) {
				returnElements.push(node);
			}
			return returnElements;
		};
	}
	else {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = [],
				elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag),
				current,
				returnElements = [],
				match;
			for(var k=0, kl=classes.length; k<kl; k+=1){
				classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)"));
			}
			for(var l=0, ll=elements.length; l<ll; l+=1){
				current = elements[l];
				match = false;
				for(var m=0, ml=classesToCheck.length; m<ml; m+=1){
					match = classesToCheck[m].test(current.className);
					if (!match) {
						break;
					}
				}
				if (match) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	return getElementsByClassName(className, tag, elm);
};
	}	
	


 
function ltrim(str) {
	return str.replace(new RegExp("^[\\s]+", "g"), "");
}
 
function rtrim(str) {
	return str.replace(new RegExp("[\\s,;.]+$", "g"), "");
}
function xTrim(str) {
    str = str.replace(/^(\s|[*\-•#])+/, '');
    for (var i = str.length - 1; i >= 0; i--) {
        if (/\S/.test(str.charAt(i))) {
            str = str.substring(0, i + 1);
            break;
        }
    }
    return rtrim(ltrim(str.replace(/^(&#9642;)+/, '')));
}

function  listonicIsChrome(){
	var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
	return is_chrome;
}

function listonicIsIE(){
	if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) return true;
	return false;
}

function listonicIsSafari(){
	var is_safari = navigator.userAgent.toLowerCase().indexOf('safari') > -1;
	return is_safari;
}

function doListonicThing(){

	var iframe = getElementsByClassNameGfdhgft('listonic_ifrm','iframe')[0];
	var id = iframe.id;
	var content = "";
	if (id != null && id.length>0)
	{	
		id = id.substring(14, id.length);
		content = eval("listonic_content_" + id);
		listonic_url = eval("listonic_url_" + id);
		listonic_name = eval("listonic_name_" + id);
		if (listonic_name.length == 0)
			listonic_name = window.document.title;
			
		if (listonic_url.length == 0)
			listonic_url = window.location.href;
	}
	else
	{
		content = listonic_content;
	}


	var url=typeof listonic_url=="string"?listonic_url:window.location.href;
	url=typeof url!="none"?url:window.location.href;
	url= url==""?window.document.href:url;
	var name=typeof listonic_name=="string"?listonic_name:window.document.title;
	var name= name==""?window.document.title:name;
	name=(name!="none"?name:window.document.title);
	var nameEscaped = escape(name);
	if (!listonicIsIE) name = encodeURI(name);
	var theme=typeof listonic_theme=="string"?listonic_theme:"addtoshoppinglist1";
	var language=typeof listonic_language=="string"?listonic_language:"pl_PL";
	language = language.toLowerCase();
	var bgcolor=typeof listonic_bgcolor=="string"?listonic_bgcolor:"transparent";
	bgcolor=bgcolor!="none"?bgcolor:"transparent";
	var icon=typeof listonic_icon=="string"?listonic_icon:"none";
	var type=typeof listonic_type=="string"?listonic_type:"none";
	var clientid=typeof listonic_clientId=="string"?listonic_clientId:"none";
	var campaign=typeof listonic_campaign=="string"?listonic_campaign:"none";
	var items = content.split(/<BR>|<br>|<BR \/>|<br \/>|<BR\/>|<br\/>|<nl>|<nl\/>|<nl \/>|&lt;br \/&gt;|&lt;br\/&gt;/);
	
	/**
	 * defines language specific resource eg. texts, images, urls parameters steering other mechanisms
	 * 
	 * please do not leave traling comma after last element in JSON below - IE compatibility issue
	 */
	var resources = {
		pl_PL : {
			themePrefix : "",
			themeSuffix : "",
			tooltip : "Kliknij i zapisz składniki w telefonie - za darmo",
			ahrefInnerText : "Dodaj do listy zakupów Listonic"
		},
		en_US : {
			themePrefix : "en/",
			themeSuffix : "",
			tooltip : "Click to send ingredients to your phone - its free",
			ahrefInnerText : "Add to shopping list in Listonic"
			
		}
	}; 
	
	var resource = resources.pl_PL;
	
	if (language.substr(0,3) == "en_" || language == "en"){
		resource = resources.en_US;
	}
	
	content = "";
	for (i in items)
	{
		if (typeof(items[i]) == "string")
		{
			content += xTrim(items[i].replace(/<(?:.|\s)*?>/g, '').replace(/\t/g, ' ').replace(/  /g, ' '),"*\-•;") + "<BR />";
		}
	}
	var contentEscaped = escape(content);
	if (!listonicIsIE) content = encodeURI(content);
	
	theme = resource.themePrefix + theme + resource.themeSuffix;
	
	if (items.length == 1)
	{
		theme = "one/" + theme;
	}
	
	var width =  theme.toLowerCase().search('addtoshoppinglist') != -1 ? 166 : 123;
	var height= 22;
	//var tooltip = "Kliknij i zapisz składniki w telefonie - za darmo";
	var tooltip = resource.tooltip;
	if (iframe) {
		
		iframe.className = iframe.className + '_used';
		
		iframe.height = height;
		iframe.width = width;
		
		var iframeHtml = '<html><head><title>Listonic</title><meta charset="utf-8"></meta><style type="text/css">' +
		'body {margin:0;} ' +
		'a {display:block; height:' +
		height +
		'px; width:' +
		width +
		'px; background:' +
		bgcolor +
		' url(http://buttons.listonic.pl/v1/img/' +
		theme +
		'.png) repeat-y; cursor:pointer; text-indent: -100em; overflow: hidden;} ' +
		'a:hover {background-position: 0px ' +
		height +
		'px;}' +
		'</style></head><body onLoad="var pageTracker = _gat._getTracker(&#39;UA-8821998-9&#39;);pageTracker._setDomainName(&#39;none&#39;);pageTracker._setAllowLinker(true);pageTracker._trackPageview();">' +
		'<form id="f" action="http://www.listonic.com/api/v1/Default.aspx" name="f1" method="post" accept-charset="utf-8" target="_blank">' +
		'<input name="iehack" type="hidden" value="&#9760;" /><input id="name" type="hidden" name="name" value="' + name + '" />' +
		'<input id="rurl" type="hidden" name="rurl" value="' +
		url +
		'"/>' +
		'<input id="content" type="hidden" name="content" value="' + contentEscaped + '" />';
		if (icon != "none") 
			iframeHtml += '<input id="icon" type="hidden" name="icon" value="' + icon + '"/>';
		if (type != "none") 
			iframeHtml += '<input id="type" type="hidden" name="type" value="' + type + '"/>';
		if (clientid != "none") 
			iframeHtml += '<input id="clientid" type="hidden" name="clientid" value="' + clientid + '"/>';
		if (campaign != "none") 
			iframeHtml += '<input id="campaign" type="hidden" name="campaign" value="' + campaign + '"/>';
		
		if (listonicIsChrome() || listonicIsSafari()) {
			iframeHtml += '<a href="#" onclick="document.getElementById(&#39;f&#39;).action=&#39;http://www.listonic.com/api/v1/Default.aspx?chromefix=&#39; + Math.random()*1000;document.getElementById(&#39;f&#39;).submit(); return false" target="_blank" title="' + tooltip + '">'+
			resource.ahrefInnerText + '</a> </form>' +
			'<script type="text/javascript" src="http://www.google-analytics.com/ga.js"></script> <\/body><\/html>';
		}
		else {
			iframeHtml += '<a href="#" onclick="document.getElementById(&#39;f&#39;).submit(); return false" target="_blank" title="' + tooltip + '">' + 
			resource.ahrefInnerText + '</a> </form>' +
			'<script type="text/javascript" src="http://www.google-analytics.com/ga.js"></script> <\/body><\/html>';
		}
		
		try{
	
			var iframeDoc;
			
			if (iframe.contentDocument) {
				iframeDoc = iframe.contentDocument;
			}
			else if (iframe.contentWindow) {
				iframeDoc = iframe.contentWindow.document;
			}
			else if (window.frames[iframe.name]) {
				iframeDoc = window.frames[iframe.name].document;
			}
			
			if (iframeDoc) {
				iframeDoc.open();
				iframeDoc.write(iframeHtml)
				iframeDoc.close();
				iframeDoc.getElementById('content').value = content;
				iframeDoc.getElementById('name').value = name;
				iframeDoc.getElementById('f').style.backgroundColor = bgcolor;
			}
		}catch(e){
				var u = 'javascript:(function(){document.open();document.domain="' + document.domain + '";document.write(\''+iframeHtml+'\');document.close();})()';		
			
				var ifrm1 = document.createElement("iframe");
				
				
				ifrm1.height = height;
				ifrm1.width = width;
	
				ifrm1.src = u;
				
				ifrm1.className = iframe.className;
	        	ifrm1.frameBorder = "0";
	        	ifrm1.scrolling = "no";
				ifrm1.id = iframe.id;
				
				if (iframe.replaceNode)
				{
					iframe.replaceNode(ifrm1);	
				}else{
					iframe.parentNode.replaceChild(ifrm1, iframe);
				}
		}
	}
//listonicFramesUsed ++;
}
doListonicThing();
