// schilling.js//// Don't include me directly - use liferay-portlet.xml to get me going!////// The Schilling DOM extension - contains minimal basket-information for use with// Ajax-based basket updates. //var Schilling = {Basket: {addPopUp: '',numberOrderLines: 0,orderItemsTotalQuantity: 0,totalIncludingRounding: 0,errorMessage: '',updateTime: (new Date()).getTime(),setValues:function(data) {this.totalIncludingRounding=data.totalIncludingRounding;this.orderItemsTotalQuantity=data.orderItemsTotalQuantity;if (data.numberOrderLines) {this.numberOrderLines=data.numberOrderLines;}this.errorMessage=data.errorMessage;this.updateTime=(new Date()).getTime();},add:function (productNumber, quantity, productText) {var html = productText+'<div class="loading-animation"></div>';var addPopUp = Liferay.Popup({position: "center",draggable: false,resizable: false,message: html,modal: false,className: "SchPopupInfo",title: null,width:200});var addquantity=1;if (quantity.length>0)addquantity=quantity;jQuery.ajax({type: 'POST',url: '/c/schilling/products/updatebasket',data: {cmd: 'add',productNumber: productNumber,quantity: addquantity,productText: productText},success: function(data) {if (data != '') {var jsonobj = eval("(" + data + ")");Schilling.Basket.setValues(jsonobj);Liferay.trigger('schNotifyOnBasketChange', 'Okay Okay Boys!');} else {alert("Oooops - try again!");}if (jsonobj.errorMessage.length > 0) {var newHtml = jQuery('.ui-dialog-content').html();newHtml = newHtml + '<div class=\'sch-ui-dialog-content\'>'+jsonobj.errorMessage+'<br><br><input class=\'sch-popup-close\' type=\'button\' value=\''+Liferay.Language.get("close")+'\'></div>';jQuery('.ui-dialog-content').html(newHtml);jQuery('.sch-popup-close').click(function() {addPopUp.hide("fast", function () { Liferay.Popup.close(addPopUp) } );});} else {addPopUp.hide("fast", function () { Liferay.Popup.close(addPopUp) } );}},failure: function() {addPopUp.hide("fast", Liferay.Popup.close(addPopUp));alert("Oooops - try again!");}});},validateBuy:function(buyForm) {jQuery.ajax({type: 'POST',url: '/c/schilling/products/updatebasket',data: 	{cmd: 'validate',buyForm: buyForm},success: function(data) {if (data != '') {var jsonobj = eval("(" + data + ")");Schilling.Basket.setValues(jsonobj);if (Schilling.Basket.errorMessage.length > 0) {alert(Liferay.Language.get("sch-basket-submit-adr-error"));return false;} else {buyForm.submit();return true;}} else {alert("Technical error! Please contact site admin.");return false;}},failure: function() {alert("Technical error! Please contact site admin.");return false;}});},validateAndBuyDibs:function(amount, language, acceptURL, callbackURL) {jQuery.ajax({type: 'POST',url: '/c/schilling/products/updatebasket',data: 	{cmd: 'validate'},success: function(data) {if (data != '') {var jsonobj = eval("(" + data + ")");Schilling.Basket.setValues(jsonobj);if (Schilling.Basket.errorMessage.length > 0) {alert(Liferay.Language.get("sch-basket-submit-adr-error"));return false;} else {ConfirmDibs(amount, language, acceptURL, callbackURL);return true;}} else {alert("Technical error! Please contact site admin.");return false;}},failure: function() {alert("Technical error! Please contact site admin.");return false;}});}},Favorite: {add:function (productId, notifyText) {var html = notifyText+'<div class="loading-animation"></div>';var addPopUp = Liferay.Popup({position: 'center',draggable: false,resizable: false,message: html,modal: false,className: "SchPopupInfo"});jQuery.ajax({type: 'POST',url: '/c/schilling/products/favorite_ajax_action',data: {cmd: 'add',productId: productId},success: function(data) {var jsonobj = eval("(" + data + ")");if (jsonobj.success == 'true') {Liferay.trigger('schNotifyOnFavorite', 'add');} else {alert("Oooops - try again!");}addPopUp.hide("fast", Liferay.Popup.close(addPopUp));},failure: function() {addPopUp.hide("fast", Liferay.Popup.close(addPopUp));alert("Oooops - try again!");}});},remove:function (productNumber, productText) {var html = productText+'<div class="loading-animation"></div>';var addPopUp = Liferay.Popup({position: 'center',draggable: false,resizable: false,message: html,modal: false,className: "SchPopupInfo",width:200});jQuery.ajax({type: 'POST',url: '/c/schilling/products/favorite_ajax_action',data: {cmd: 'delete',productNumber: productNumber},success: function(data) {var jsonobj = eval("(" + data + ")");if (jsonobj.success == 'true') {return true;} else {alert("Oooops - try again!");}addPopUp.hide("fast", Liferay.Popup.close(addPopUp));},failure: function() {addPopUp.hide("fast", Liferay.Popup.close(addPopUp));alert("Oooops - try again!");}});}},Compare: {toggle:function (productItemId, item, colname, productUrl) {var html = '<div class="loading-animation"></div>';if (colname) {cmd = 'delete';jQuery("."+colname).hide();jQuery(".sch-comparecheck-"+productItemId).each(function() {jQuery(this).removeAttr("checked");});} else {if (item.checked)cmd = 'add'elsecmd = 'delete';}jelem = jQuery(item);jelem.hide();jQuery.ajax({type: 'POST',url: '/c/schilling/products/compare_ajax_action',data: {cmd: cmd,productItemId: productItemId,productUrl: productUrl},success: function(data) {jelem.show("fast");},failure: function() {jelem.show("fast");if (item.checked)jelem.removeAttr("checked")elsejelem.addAttr("checked");}});},view:function(data) {var html = '<div id=sch-comparelist><div class="loading-animation"></div></div>';var addPopUp = Liferay.Popup({title: Liferay.Language.get('compare'),draggable: true,resizable: true,message: html,modal: true,width: "auto",className: "SchPopupCompare",position: [25, 133]});//var url = '/web/guest/shop?p_p_id=SCH_PRODUCTCOMPARE&compare_type=popup&p_p_lifecycle=1&p_p_state=exclusive&p_p_mode=view&p_p_col_id=column-2&p_p_col_count=1&struts_action=/schilling/products/compare';var url = '/web/guest/shop?p_p_id=SCH_PRODUCTCOMPARE&compare_type=popup&p_p_lifecycle=1&p_p_state=exclusive&p_p_mode=view&struts_action=/schilling/products/compare';jQuery.ajax({type: 'POST',url: url,data: {target: data.target,prod_struts_action: data.prod_struts_action},success: function(html) {var mydiv = jQuery('#sch-comparelist')[0];mydiv.innerHTML = html;jQuery('#sch-comparelist')[0].center( { vertical: false } );},failure: function() {addPopUp.hide("fast", Liferay.Popup.close(addPopUp));alert("Oooops - try again!");}});}},Demo: {Book:function (productId, email, location, bookdate, note) {jQuery.ajax({type: 'POST',url: '/c/schilling/products/bookdemo_ajax_action',data: {cmd: 'add',productId: productId,email: email,location: location,bookdate: bookdate,note: note},success: function(data) {var jsonobj = eval("(" + data + ")");if (jsonobj.success == 'true') {Liferay.trigger('schNotifyOnBookDemoSuccess');} else {Liferay.trigger('schNotifyOnBookDemoFailure');};},failure: function() {Liferay.trigger('schNotifyOnBookDemoFailure');}});}},EditTextState: {Toggle:function (value) {jQuery.ajax({url: '/c/schilling/language_properties/update_editstate',data: {value: value},success: function(data) {var jsonobj = eval("(" + data + ")");},failure: function() {alert("Ooops - try again!");}});}},Content: {showhits:// The out-of-date-version with hardcoded HTML for frame of searchresultat. Replaced by fillhitsfunction (data) {var section = 0;if (data.section)section = data.section;var SchAjaxSearchResultSection = document.getElementById('SchAjaxSearchResult_'+section);var shtml = '';if (data.xml.feed.entry) {shtml = '<fieldset class="sch-ajaxsearch-section, block-labels"><legend>'+data.title+'</legend>';var i = 0;var ites = 0;if (data.xml.feed.entry.length == undefined)ites = 1;elseites = data.xml.feed.entry.length;for (i=0; i < ites; i++) {if (data.xml.feed.entry.length == undefined)entry = data.xml.feed.entry;elseentry = data.xml.feed.entry[i];shtml += '<div class="sch-ajaxsearch-hit"><div class="sch-ajaxsearch-anchor"><a class="sch-ajaxsearch-anchor" href="'+ entry.link.href + '">';if (entry.title.length > 0)shtml += entry.title;elseshtml += entry.link.href;shtml += '</a> ';var rel = 0;var score = 0;score = entry['relevance:score'];var stars = (5 * score);shtml += '</div><div class="sch-ajaxsearch-stars">';for (var s=0; s < stars; s++)shtml += '<img class="sch-ajaxstar" src="'+themeDisplay.getPathThemeImages()+'/ratings/star_on.png" alt="*">';shtml += '</div></div>';}shtml += '</fieldset>';SchAjaxSearchResultSection.innerHTML = shtml;SchAjaxSearchResultSection.style.display = 'block';} elseSchAjaxSearchResultSection.style.display = 'none';document.getElementById('SchAjaxSearchResult').style.display = 'block';},fillstars:function (data) {if (data == undefined)return "";var html = '<div class="sch-ajaxsearch-stars">';var rel = 0;var score = 0;score = data;var stars = (5 * score);for (var s=0; s < stars; s++)html += '<img class="sch-ajaxstar" src="'+themeDisplay.getPathThemeImages()+'/ratings/star_on.png" alt="*">';html += '</div>';return html;},fillhits:function (data, schportlethits, sectionTemplates) {var $ = jQuery;var section = 0;if (schportlethits.section)section = schportlethits.section;var searchClassName = "";if (schportlethits.searchClassName)searchClassName = schportlethits.searchClassName;var sectionTemplate = sectionTemplates[searchClassName];var sectionId = 'SchAjaxSearchResult-'+(searchClassName.replace(/\./g, "-"));if (schportlethits && schportlethits.xml && schportlethits.xml.feed && schportlethits.xml.feed.entry)for (i=0; i < schportlethits.xml.feed.entry.length; i++)if (schportlethits.xml.feed.entry[i]['relevance:score'])schportlethits.xml.feed.entry[i].scorerelevance = schportlethits.xml.feed.entry[i]['relevance:score'];document.getElementById(sectionId).innerHTML = unescape(sectionTemplate);$('#'+sectionId).fillTemplate(schportlethits).find("a[href='undefined']").empty();$('#'+sectionId).css('display', 'block');},search:function (query, event, searchclasses, maxhits, masterTemplate, sectionTemplates) {if (event.keyCode == 27) {query = "";event.target.value = "";}// Filter CTRL-A, TAB and function keys here later....if (query.length > 1) {if (document.getElementById('SchAjaxSearchResult').style.display == "none")document.getElementById('SchAjaxSearchResult').innerHTML = masterTemplate;var i = 0;for (i=0; i < searchclasses.length; i++) {var SchAjaxSearchResultSection = document.getElementById('SchAjaxSearchResult_'+i);// SchAjaxSearchResultSection.innerHTML = '<div class="loading-animation"></div>';// SchAjaxSearchResultSection.innerHTML = '';// SchAjaxSearchResultSection.style.display = 'block';/* jQuery.ajax({mode: 'abort',port: searchclasses[i]});*/jQuery.ajax({mode: 'abort',port: searchclasses[i],type: 'POST',url: '/c/schilling/products/search_ajax_action?p_p_state=exclusive&p_l_id='+themeDisplay.getPlid()+'&c='+searchclasses[i],data: {q: query,c: searchclasses[i],m: maxhits,s: i},success: function(data) {//SchAjaxSearchResultSection.innerHTML = '';var schjsonobj = eval("(" + data + ")");if (schjsonobj.success == true) {Schilling.Content.fillhits(data, schjsonobj, sectionTemplates);document.getElementById('SchAjaxSearchResult').style.display = 'block';} else {if (window.console)console.log("Oooops no success - try again! Data:\n"+data);//Schilling.Debug.popfade("Oooops no success - try again! Data:<br>"+data);//alert("Oooops no jsonobj.success - try again!");};},failure: function(data) {if (window.console)console.log("Oooops failure - try again! Data:\n"+data);Schilling.Debug.popfade("Oooops no success - try again! Data:<br>"+data);//alert("Oooops failure - try again!<br>"+data);}});}} else {document.getElementById('SchAjaxSearchResult').style.display = 'none';}}}}Schilling.Utils = new Class({initialize: function(options) {var instance = this;instance.options = options;instance._textsAreEditable = instance.options.editable;instance._updateURL = '/c/schilling/language_properties/update_property';return instance._makeTextsEditable();},_saveLanguageProperty: function(newText, span, updateElemButton) {var instance = this;var languageKey = span.attr("schlangkey")var data = {schLanguageKey: languageKey,schLanguageText: newText,cmd: 'update_text'};jQuery.ajax({data: data,url: instance._updateURL,success: function(data) {var jsonobj = eval("(" + data + ")");if (jsonobj.success == 'true') {if (!updateElemButton)span.text(newText);} else {alert("Oooops - try again!");};},failure: function() {alert("Oooops - try again!");}});},_setTextsAreEditable: function() {var $ = jQuery; var instance = this;},_getTextsAreEditable: function() {	var instance = this;alert(instance._textsAreEditable);},_makeTextsEditable: function() {var $ = jQuery; var instance = this;var resetCursor = function() {$(".language-property").css('cursor', 'pointer');$(".language-property").css('background-color', 'transparent');};$(".language-property").hover(function() {if ($(this).children().is(":input")) {$(this).children().css('cursor', 'text');$(this).css('background-color', 'yellow');}$(this).css('cursor', 'text');$(this).css('background-color', 'yellow');$(this).attr("title", Liferay.Language.get("sch-utils-edit-text-instr"));},resetCursor);$(".language-property").rightMouseDown(function(event) {if (!event.ctrlKey) {return false;}$(document).noContext();var span = $(this);var textBefore = span.html().replace('\n', '');var textElemType = span.children(':first').attr("type"); //use to check if it's a buttonvar updateElemButton = false;if (textElemType == "button" ||	textElemType == "reset" || textElemType == "submit") {updateElemButton = true;textBefore = span.children(':first').attr('value');}var msgInput ='<input class="langPropInput" type="text" name="msgInput" value="'+textBefore+'" class="text" />';if(span.parent().is("a"))span.parent().after(msgInput);elsespan.after(msgInput);var inputElement = $('.langPropInput');span.hide();inputElement.focus(); inputElement.blur( function() {var newText = $('.langPropInput').val();if (textBefore != newText) {instance._saveLanguageProperty(newText, span, updateElemButton);if (updateElemButton) {$(":input[value='"+span.children(':first').attr('value')+"']").attr("value", newText);}}inputElement.remove();span.show();$(document).enableContext();});return false;});resetCursor();return false;}, _textsAreEditable: false,_updateURL: ''});function SchAddOrderLine(productNumber, quantity, productText) {//	if (console)//		console.log("SchAddOrderLine("+productNumber);Schilling.Basket.add(productNumber, quantity, productText);}function SchCategoryTreeAction(){}function SchPopImage(imageurl, imageclass){}function locateSchillingPortlets(thediv){//	dummy = alert("This is an Reiche Alert!!!!\n"+getRefreshPortletList());//	elem = document.getElementById(thediv);//	elem.innerHTML = ""+getRefreshPortletList();}// Append contains function for arraysif (!Array.contains)Array.prototype.contains = function (element) {for (var i = 0; i < this.length; i++) {if (this[i] == element) {return true; }}return false; };// Append trim function for String... if (!String.trim)String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g, ""); };function refreshSchillingPortlets(depends)// depends: Commaseperated dependancylist. */{//	console.log("refreshSchillingPortlets(depends="+depends+")");//	console.log("portlets: "+Liferay.Portlet.list.toString());    var thisrefreshlist = new Array();    thisrefreshlist.length = 0; // Ensure it is empty!!!???    var thisdependsarray = depends.split(',');for (var portletId in Liferay.Portlet.list) {//		console.log("Liferay portlet: "+portletId);var thisportlet = document.getElementById("p_p_id_" + portletId + "_");var frompos = thisportlet.innerHTML.indexOf("<!-- SCH-REFRESH-DEP:");if (frompos < 0)continue;frompos += 21;var topos = thisportlet.innerHTML.indexOf("-->", frompos);if (topos < 0)continue;//		console.log("topos="+topos+" frag: "+thisportlet.innerHTML.substring(frompos,topos));//		console.log("splitting: <"+thisportlet.innerHTML.substring(frompos,topos).trim()+">");var thisdepsa = thisportlet.innerHTML.substring(frompos,topos).trim().split(",");//		console.log("Got "+thisdepsa.length+" deps.");for (var depi=0; depi < thisdepsa.length; depi++) {var depstr = thisdepsa[depi];//			console.log("this depstr: "+depstr);if (thisdependsarray.contains(depstr)) {//				console.log("adding: "+portletId);thisrefreshlist.push(portletId);}}    }// thisrefreshlist now contains portletIds to be refreshed.// Work them ony by one?for (var i=0; i < thisrefreshlist.length; i++) {//		console.log("Refreshing: "+thisrefreshlist[i]);var dummy = eval("_"+thisrefreshlist[i]+"_refreshPortlet()");}}// Global functions or for Theme ???// KO - I don't think they are used anymore... 2009-02-15/*function displaySubmenu(nav_item_count) {var tables = document.getElementsByTagName("DIV");var submenu;for (i=0;i<tables.length;i++) {    if (tables[i].id == "child-menu"+nav_item_count) {        submenu = tables[i];        break;    }}if (submenu != null) {    submenu.className = "visible-child-menu";    submenu.style.zIndex = Liferay.zIndex.DOCK;}}function hideSubmenu(elem, nav_item_count) {    alert(elem);    elem.className = "child-menu"+nav_item_count;}function hideSubmenu(nav_item_count) {var tables = document.getElementsByTagName("DIV");var submenu;for (i=0;i<tables.length;i++) {    if (tables[i].id == "child-menu"+nav_item_count) {        submenu = tables[i];        break;    }}if (submenu != null) {    submenu.className = "child-menu-hidden";}}function setBg(elem) {    elem.className = "sub-td-over";}function unsetBg(elem) {    elem.className = "sub-td";}*//* Validate user forms */function validateAddressForm(form) {var fields = getElementsByClassName("required", "INPUT", form);    for (i=0; i < fields.length; i++) {        field = fields[i];        if ((form.updateShipping.value == "false") && (field.name == "shipping-firstname" || field.name ==	"shipping-lastname" || field.name == "shipping-street1"        	|| field.name == "shipping-street2" || field.name == "shipping-zip" || field.name == "shipping-city" || field.name == "shipping-company")) {      	} else {  		if (field.value == "") {            alert(unescape(Liferay.Language.get("sch-basket-edit-adr-error")));            field.focus();            return false;        }}    }    return true;}function getElementsByClassName(className, tag, elm){    var tag = tag || "*";    var elm = elm || document;    var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);    var returnElements = [];    var current;    var length = elements.length;    for(var i=0; i<length; i++){        current = elements[i];       if (current.className.indexOf(className) > -1) {            returnElements.push(current);        }    }    return returnElements;}