$.fn.replaceText = function( search, replace, text_only ) {
return this.each(function(){
var node = this.firstChild,
val,
new_val,
// Elements to be removed at the end.
remove = [];
// Only continue if firstChild exists.
if ( node ) {
// Loop over all childNodes.
do {
// Only process text nodes.
if ( node.nodeType === 3 ) {
// The original node value.
val = node.nodeValue;
// The new value.
new_val = val.replace( search, replace );
// Only replace text if the new value is actually different!
if ( new_val !== val ) {
if ( !text_only && /$1");
};
$.fn.tooltip = function(options)
{
$(this).live('mouseout', function() {
$('body').find('#tooltip').fadeOut(200, function() {$(this).remove();});
//$('#main_container').find('#tooltip').fadeOut(200, function() {$(this).remove();});
}).live('mouseover', function() {
var offset = $(this).offset();
//$('#main_container > #tooltip').remove();
$('body > #tooltip').remove();
//if($('#main_container').find('#tooltip').length == 0)
if($('body').find('#tooltip').length == 0)
{
//$('#main_container').append("
"+$(this).attr('tooltip')+"
").find('#tooltip').show('bounce',10);
$('body').append(""+$(this).attr('tooltip')+"
").find('#tooltip').show('bounce',10);
}
});
};
$('.teeko-tooltip').tooltip();
$.fn.overlay = function(cb)
{
//if($("#main_container").find('#editor-overlay').length > 0)
if($("body").find('#editor-overlay').length > 0)
{
//$("#main_container").find('#editor-overlay').fadeOut(200, function() {$(this).remove();});
$("#body").find('#editor-overlay').fadeOut(200, function() {$(this).remove();});
}
else
{
//$("#main_container").append('');
$("body").append('');
//$("#main_container").find('#editor-overlay').css({
$("body").find('#editor-overlay').css({
'background-color' : '#000',
'display' : 'block',
'width' : '100%',
'left' : '0',
'top' : '0',
'height' : '100%',
'z-index' : '98',
'position' : 'fixed',
'opacity' : '0.5',
'filter' : 'alpha(opacity=50)'
}).fadeIn(200, cb);
}
};
$.fn.scale = function(parms)
{
if(!parms.ease) parms.ease = 'easeOutBack';
$(this).hover(
function () {
parms.cwidth = $(this).width();
parms.cheight = $(this).height();
// Easing methods: easeOutElastic, easeOutBack, linear, easeOutQuart,
// $(this).data('zindex', $(this).css('z-index') == 'auto' ? 1 : $(this).css('z-index')).css('z-index', 10).addClass('teeko-editor-hover').animate({width:"+="+parms.width,height:"+="+parms.height,marginTop:"-="+(parms.height / 2),marginLeft:"-="+(parms.width / 2)},parms.speed,parms.ease, function() { /*if($(this).hasClass('teeko-editor-hover')) $(this).rate();*/});
$(this).parent().find('.gallery-title').css('z-index', 10);
$(this).data('zindex', $(this).css('z-index') == 'auto' ? 1 : $(this).css('z-index')).css('z-index', 10).animate({width:parms.width,height:parms.height,marginTop:((parms.cheight - parms.height) / 2),marginLeft:((parms.cwidth - parms.width) / 2)},{duration:parms.speed,easing:parms.ease,queue:false}, function() { /*if($(this).hasClass('teeko-editor-hover')) $(this).rate();*/});
},
function () {
//$(this).hideRate();
$(this).parent().find('.gallery-title').css('z-index', 9);
$(this).css('z-index',9).animate({width:parms.cwidth,height:parms.cheight,marginTop:0,marginLeft:0},{duration:parms.speed,easing:parms.ease,queue:false}, function() { $(this).css('z-index', $(this).data('zindex')); });
}
);
};
jQuery.fn.clearForm = function()
{
$(this).find(':input').each(function() {
switch(this.type) {
case 'password':
case 'select-multiple':
break;
case 'select-one':
break;
case 'text':
case 'textarea':
$(this).val('');
$(this).removeClass('error');
break;
case 'checkbox':
case 'radio':
this.checked = false;
}
});
};
/// Image preloader class
var ImagePreloader = {
status: false,
load: function()
{
},
unload: function()
{
},
init: function() {
}
};
function Calculate(parms, dest, endtext)
{
//var list = parms.split('*');
var calstr = "";
/*
$.each(list,function(i,item)
{
if(item[0] == '#') calstr += "$('"+item+"').val()*"; else calstr += parseFloat(item) + "*";
});
calstr = calstr.slice(0, -1);
*/
parms = parms.replace(/(#\w+)/g, "$('$1').val()");
// Tähän parmsiin pitää tehä vielä sitten jotain tarkistuksia ettei kukaan voi käyttää tätä väärin
// kun noita lukemia voi ite kirjottaa niin sittehän sinne vois kirjottaa javascriptiäkin?
var sum = Math.round(eval(parms));
$(dest).text(sum+' '+endtext);
}
function ArraySearch(needle, haystack)
{
for(key in haystack)
{
var value = haystack[key];
if(value == needle)
{
return true;
}
}
return false;
}
$.fn.preloader = function(fn)
{
if (typeof preloaded_images == 'undefined') {
preloaded_images = [];
}
var src = $(this).attr('src');
// if(preloaded_images.indexOf(src) !== -1)
if(ArraySearch(src, preloaded_images) !== false)
{
fn.call();
}
else
{
var img = new Image();
$(img).load(function()
{
preloaded_images.push(src);
fn.call();
})
.error(function()
{
preloaded_images.push(src);
fn.call();
})
.attr('src', src);
}
};
/// Page Preloader class
var preloader = {
PRELOADER_TIMEOUT: 300,
interval: false,
obj: false,
status: false,
show: function()
{
this.obj.css({marginLeft:'-175px',opacity:0}).show().animate({marginLeft:'-70px','opacity':1},400);
},
load: function()
{
var $$ = $('#loading_animation');
if($$.length > 0 && this.status === false)
{
this.obj = $$;
this.status = true;
this.interval = setTimeout('preloader.show()', this.PRELOADER_TIMEOUT);
}
},
unload: function()
{
var preloader = $('#loading_animation');
if(preloader.length > 0)
{
clearTimeout(this.interval);
this.interval = false;
if(this.status === true)
{
this.status = false;
preloader.fadeOut(500, function() { $(this).hide();});
}
}
},
init: function() {
}
};
var editor = {
status: false,
layer: '#site_editor',
exists: function()
{
return ( $(this.layer).length > 0 ) ? true : false;
},
load: function()
{
},
target: function()
{
return this.layer;
},
init: function()
{
$(document).find('a').each( function()
{
$(this).find(':eq(0)').unwrap();
});
}
};
/// Custom selectoreitahan vois tehä ihan sellasiakin et #site_editor:wrapper, #site_editor:element-selected
/// Custom Selectors ------------------------------------
$.extend($.expr[':'],{
backgroundImage: function(a) {
return $(a).css('background-image') !== 'none';
},
wrapper: function(a) {
return $(a).data('teeko-wrapper') === 'true';
},
autoOverflow: function(a) {
// ei käytössä
return $(a).css('overflow') === 'auto';
},
fullSize: function(a) {
// Ei käytössä
return $(a).css('width') === '100%';
}
});
$.fn.extend({_animate: $.fn.animate,_css: $.fn.css});
var parent_showed = false;
jQuery.fn.uniqueByTag = function(tag)
{
var r = new Array();
o:for(var i = 0, n = this.length; i < n; i++)
{
for(var x = 0, y = r.length; x < y; x++)
{
if(r[x][tag]==this[i][tag])
{
this.splice(x, 1);
continue o;
}
}
r[r.length] = this[i];
}
/*
$.each(this,function(i,item)
{
console.log(item['src']);
$.each(this,function(i2,item2)
{
if(item[tag] == item2[tag] && )
{
//this.splice(i, 1);
}
});
});*/
};
/*
jQuery.fn.css = function(parm, value)
{
// Lets create IE fix and add alpha filter if opacity is changed!
if(parm.opacity) parm.filter = 'alpha(opacity = '+ parm.opacity * 100 +')';
if(value)
return $(this)._css(parm, value);
else
return $(this)._css(parm);
}
*/
jQuery.fn.preload = function()
{
var $$ = $(this);
$$.find('img,div:backgroundImage').each(function()
{
var src = $(this).attr('src');
if(src === undefined) src = $(this).backgroundImage();
var img = new Image();
$$.data('teeko-editor-preloading',{});
$(img).load(function()
{
$$.data('teeko-editor-preloading').loaded++;
if($$.data('teeko-editor-preloading').loaded == $$.data('teeko-editor-preloading').images) setTimeout( function() {$$.show().data('teeko-editor-preloading',false);},10);
})
.error(function()
{
// If error then continue cause otherwise picture doesnt show anywhere
// if element has 5 pictures and 4 pictures is loaded then no animation occurs
$$.data('teeko-editor-preloading').loaded++;
if($$.data('teeko-editor-preloading').loaded == $$.data('teeko-editor-preloading').images) setTimeout( function() {$$.show().data('teeko-editor-preloading',false);},10);
})
.attr('src', src).hide();
});
}
/*
function preload()
{
$('#main_container').preload();
}
*/
/*
try {
window.addEventListener('load', preload, false);
} catch(e) {
window.onload = preload;
}
*/
/*
jQuery.fn.animate = function(parm, speed, cb)
{
// Tähänhän me voidaan hakea tieto esim. tietokannasta!! tai sitten
// ihan vaan templaten alussa on esim.
var dont_animate = false;
var el = $(this);
var imgs = el.find('img,div:backgroundImage');
// TÄÄ HEITTÄÄ VIRHETTÄ ETTEI TOIMI SAFARILLA!!!
// DEBUG: OTETAAN NÄÄ UNIIKKI JUTUT VIELÄ POIS MUTTA NE ON LISÄTTÄVÄ MAHD PIAN KOSKA MUUTEN
// TÄSSÄ KÄYDÄÄN TURHIA JUTTUJA LÄPI!!!
// imgs.uniqueByTag('src');
// imgs.uniqueByTag('background-image');
/// DEBUG: tähän vois myös tehä jonku sellasen et ei sellasii enää tarvi ladata mitkä olis jo latautunu
// mutta ei oo ladattu tällä.. sillohan teeko-editor-preloading === undefined vaikka ne olis jo ladattu
// ja ei niit uusiks kannata ladata.. mutta mistä se katotaan?!? preloadataanko loppujen lopuks aivan kaikki
// graffa et saadaan merkatuks et nyt on preloadattu!!?!?
/// DEBUG: Tehty nyt tohon toi et site_editor elementti pitää löytyä ennenku käytetään animate
/// preloadingia.. se johtuu IE bugista hellstattoo sivuilla.. eli menu animaatiot ei ekalla clikkauksella
/// tehty ollenkaan.. ja se johtu tästä kun jostain syystä se ei preloadannu niitä
if( el.data('teeko-editor-preloading') === undefined && imgs.length > 1 && editor.exists() === true)
{
el.data('teeko-editor-preloading', {});
if(el.attr('tagName') === 'IMG' || el.css('background-image') !== 'none') imgs.push(el);
imgs.each(function()
{
var src = $(this).attr('src');
if(src === undefined) src = $(this).backgroundImage();
var img = new Image();
$(img).load(function()
{
el.data('teeko-editor-preloading').loaded++;
if(el.data('teeko-editor-preloading').loaded == el.data('teeko-editor-preloading').images) setTimeout( function() {return el._animate(parm, speed, cb).data('teeko-editor-preloading',false);},10);
})
.error(function()
{
// If error then continue cause otherwise picture doesnt show anywhere
// if element has 5 pictures and 4 pictures is loaded then no animation occurs
if(el.data('teeko-editor-preloading') !== undefined)
{
el.data('teeko-editor-preloading').loaded++;
if(el.data('teeko-editor-preloading').loaded == el.data('teeko-editor-preloading').images) setTimeout( function() {return el._animate(parm, speed, cb).data('teeko-editor-preloading',false);},10);
}
})
.attr('src', src);
});
el.data('teeko-editor-preloading', { status: true, loaded: 0, images: imgs.length });
}
else
{
// if(parm.opacity) parm.filter = 'alpha(opacity = '+parm.opacity * 100+')';
if(dont_animate)
el.css(parm);
else
return el._animate(parm, speed, cb);
}
}
*/
jQuery.fn.backgroundImage = function()
{
//var regex = new RegExp("url\\('?([^']*)'?\\)", 'gi');
//var match = regex.exec( $(this).css('background-image') );
//if(match !== null) return match[match.index+1];
if($(this).css('backgroundImage') !== undefined && $(this).css('backgroundImage') !== 'none' && $(this).css('backgroundImage') !== null)
{
/// DEBUG: replace('"','') on vain ja ainoastaan IE Bugi.. se laittaa background-image url('') sisään hipsukat
// jolloin css ei ymmärrä sitä kuvaa
return $(this).css('backgroundImage').replace(/^url|[\(\)]/g, '').replace('"','').replace('"','');
}
};
function validation_success(data)
{
if(data.value === null)
{
alert('Check username or password!');
}
else
{
location.href = data.value;
}
}
function validation_success2(data, act)
{
if(data.status == false)
{
//alert('Check username or password!');
Request('app/main/main/alert', {method:'get', append:'true'});
}
else
Request(act, {method:'get'});
}
jQuery.fn.validation = function(act)
{
$(this).validate(
{
submitHandler: function(form)
{
if($(form).attr('function'))
{
Request($(form).attr('function'), {callback:'validation_success(data)', method:'get'}, {userName: $(form).find('#uid').attr('value'), password: $(form).find('#pwd').attr('value')});
}
else if($(form).attr('function2'))
{
// Clear all watermarked input boxes!!
$(form).find('.watermark').attr('value','');
Request($(form).attr('function2'), {callback:'validation_success2(data,"'+act+'")', method:'get'}, $(form).attr('id'));
}
else if(!act)
{
if($(form).attr('acceptCharset')) document.charset = $(form).attr('acceptCharset');
form.submit();
}
else if($(form).attr('enctype') == 'multipart/form-data')
{
// If enctype is multipart then form has file uploads
$('body').append("Tiedostoja lähetetään! Älä sulje selainta..
");
$(form).find('[teeko-element-type=button]').attr('disabled','disabled');
form.submit();
$(form).uploadercallback( function() {
$('body').find('#teeko-uploader-status').fadeOut( function() {$(this).remove();});
Request('function/messages/email', {callback: function() {Request(act, {method:'get'})} , method:'post'}, $(form).attr('id'), [{'name':'settings.mailto','value':$(form).attr('mailto')},{'name':'settings.formtype','value':$(form).attr('formtype')},{'name':'settings.language','value':$(form).attr('language')}]);
});
}
else if($(form).attr('mailto'))
{
Request('function/messages/email', {callback: function() {Request(act, {method:'get'})} , method:'post'}, $(form).attr('id'), [{'name':'settings.mailto','value':$(form).attr('mailto')},{'name':'settings.formtype','value':$(form).attr('formtype')},{'name':'settings.language','value':$(form).attr('language')}]);
}
else if($(form).attr('sendto'))
{
Request('function/messages/sendto', {callback: function() {Request(act, {method:'get'})} , method:'post'}, $(form).attr('id'), [{'name':'settings.oid','value':$(form).attr('oid')},{'name':'settings.sendto','value':$(form).attr('sendto')}]);
}
else
Request(act, {method:'get'}, $(form).attr('id'));
},
errorPlacement: function(error, element)
{
if($(element).length > 0)
{
if($(element.attr("error")).length > 0) $(element.attr("error")).show();
// var $$ = $(element).find('+ div');
// $$.show();
/*
if($(element).attr('errorClass') !== "")
$(element).addClass($(element).attr('errorClass'));
*/
$(element).keyup(function()
{/*
if($(element).attr('errorClass') !== "")
$(element).removeClass($(element).attr('errorClass'));
*/
if($(element.attr("error")).length > 0) $(element.attr("error")).hide();
// $$.hide();
});
}
}
});
}
jQuery.fn.getattr = function(attr, pos, sum)
{
var value = $(this).css(attr);
if(sum > 0)
{
value = parseFloat(value.replace('px',''));
if(pos == '-') value = value - sum;
if(pos == '+') value = value + sum;
value = value +'px';
}
return value;
}
/*
jQuery.fn.teeko_effects_show = function(element_id)
{
var parent_id = $(this).parent().attr('id');
if(parent_id == element_id)
{
parent_id = $(this).attr('id');
}
parent_showed = parent_id;
if( $("#element_hider").length == 0 )
{
$("#main_container").append("Hävitit elementit. Paina tästä jos haluat ne takaisin
");
$("#element_hider").hover(
function () {
$(this).animate({opacity:1});
},
function () {
$(this).animate({opacity:0.5});
}
);
$("#element_hider").click( function(e)
{
showed = false;
$(this).teeko_effects_hide('background');
e.stopPropagation();
});
}
$("#element_hider").animate( {marginLeft:'+=500px'}, 400 );
$("#"+element_id+" .resizable:not(#"+parent_id+"):not(#"+parent_id+" *)").animate({marginLeft:'-=2000px',marginTop:'-=1000px'},1000);
}
jQuery.fn.teeko_effects_hide = function(element_id)
{
$("#element_hider").animate( {marginLeft:'-=500px'}, 400 );
parent_id = parent_showed;
parent_showed = false;
$("#"+element_id+" .resizable:not(#"+parent_id+"):not(#"+parent_id+" *)").animate({marginLeft:'+=2000px',marginTop:'+=1000px'},1000);
}
*/
/**
* Teeko Framework Javascript class
*
* @copyright (C) 2009 Webisti Oy. All rights reserved
* @version 1.0
* @author Tomi Tuovinen
*/
function AddBookmark()
{
var title = document.title;
var pairs = location.href.split( "#" );
var url = pairs[0];
if (window.sidebar) { // Mozilla Firefox Bookmark
window.sidebar.addPanel(title, url,"");
} else if( window.external ) { // IE Favorite
window.external.AddFavorite( url, title); }
else if(window.opera && window.print) { // Opera Hotlist
return true;
}
}
function getUnixTimestamp()
{
return Math.round(new Date().getTime() / 1000);
}
function addslashes(str)
{
if(str)
{
str=str.replace(/\\/g,'\\\\');
str=str.replace(/\'/g,'\\\'');
str=str.replace(/\"/g,'\\"');
str=str.replace(/\0/g,'\\0');
return str;
}
}
function stripslashes(str)
{
str=str.replace(/\\'/g,'\'');
str=str.replace(/\\"/g,'"');
str=str.replace(/\\0/g,'\0');
str=str.replace(/\\\\/g,'\\');
return str;
}
function Error(errortype, efunction, edescription)
{
var ErrorArr = {};
ErrorArr.scripttype = 'JAVASCRIPT'; // 1=Javascript in Database errorhandler_scripttypes
ErrorArr.errortype = errortype; // Database errorhandler_errortypes
ErrorArr.file = ''; // Tähän tulee file missä errori on tapahtunut.. miten sen sais automaattisesti?
ErrorArr.efunction = efunction;
ErrorArr.description = edescription;
ErrorArr.trace = ''; // PHP:llä saadaan mukavasti Trace mut mites javascriptillä?!?
Request('function/error/SetError', "{'method':'get'}", ErrorArr);
}
function CreateNewElements(direction)
{
$('#background *').animate({left:'-300px'},300, 'linear', function()
{
$('#background *').hide();
Request('function/XML/GetElement',"{'async':false, 'append':'true', 'dest':'background', 'method':'get'}","{'xml':'<?xml version="1.0" encoding="UTF-8"?><template id="Button"> <img><attribute class="resizable"/><attribute src="sites/ilmoitustaulu/images/postit/postit_1_blue_2.png"/><css top="50px"/><css z-index="20"/><css right="-300px"/><css position="absolute"/><css width="100px"/><css height="100px"/></img> </template>'}");
Request('function/XML/GetElement',"{'async':false, 'append':'true', 'dest':'background', 'method':'get'}","{'xml':'<?xml version="1.0" encoding="UTF-8"?><template id="Button"> <img><attribute class="resizable"/><attribute src="sites/ilmoitustaulu/images/postit/postit_2_green_2.png"/><css top="400px"/><css z-index="20"/><css right="-300px"/><css position="absolute"/><css width="100px"/><css height="100px"/></img> </template>'}");
Request('function/XML/GetElement',"{'async':false, 'append':'true', 'dest':'background', 'method':'get'}","{'xml':'<?xml version="1.0" encoding="UTF-8"?><template id="Button"> <img><attribute class="resizable"/><attribute src="sites/ilmoitustaulu/images/polaroid/polaroid1.png"/><css top="80px"/><css z-index="20"/><css left="-300px"/><css position="absolute"/><css width="100px"/><css height="100px"/></img> </template>'}");
$('#background *').animate({right:'300px'},300);
} );
}
function CheckSiteLogin(json_func_settings, element)
{
var onErrorFunction = json_func_settings['onError'];
var onSuccessFunction = json_func_settings['onSuccess'];
var XHR = Request("function/db/CheckLogin", '{method:"get","async":"false"}', element);
try
{
if (XHR.status == 200)
{
var data = XHR.responseText;
if(dest_id && data == 'true')
{
if(onSuccessFunction)
{
//Request(act,'{dest:"'+dest_id+'", method:"post"}');
eval(onSuccessFunction);
}
return true;
}
else
{
if(onErrorFunction)
{
//Request(act,'{dest:"'+dest_id+'", method:"post"}');
eval(onErrorFunction);
}
return false;
}
}
else
{}
}
catch(ex) {}
}
function include(filename)
{
var head = document.getElementsByTagName('head')[0];
script = document.createElement('script');
script.src = filename;
script.type = 'text/javascript';
// DEBUG: tässä pitäis tarkistaa onko filenamessa jotain ja palauttaa true tai false
// niin että GetElementClasses.js luokassa ei yritetä ees tehä uutta luokkaa jos siinä ei oo
// tiedostoa olemassa
head.appendChild(script);
return true;
}