function getPhotos (elem, height, num, p) {

    if (!$(elem)) {
       //alert('Content element ['+elem+'] not found');
       return;
    }
    if (typeof(num) == 'undefined') {
       alert('Content element ['+elem+'] number of display does not has value.');
       return;
    }

    var param = (typeof(p) == 'undefined') ? {} : p;
    var hash  = $H({option:'com_photo', task:'x_getframe', tag:elem, limit:num});
    hash.update(param);

    new Ajax.Request(_absolutePath+'/ajax.lnk.php', {
       method: 'get',
       parameters: hash.toObject(),
       //onLoading: function() { $(elem).update('loading..') },
       onFailure: function() { $(elem).update('error'); },
       onSuccess: function(transport, json) {
          var text    = transport.responseText;
          var scripts = text.extractScripts();

          if (scripts.length > 0) { scripts.map(function(script) { eval(script); }); }
          if (json && (json.status == -1 || json.status == 0)) { $(elem).update(json.message); }
          else if (json && json.status == 1) {
             var showNext = (json.totalPages > 1) ? 'block' : 'none';

             var html = '<input type="hidden" id="#{name}_totalPage" name="#{name}_totalPage" value="#{pages}" />' +
                        '<input type="hidden" id="#{name}_currentPage" name="#{name}_currentPage" value="0" />' +
                        '<table width="100%" border="0" cellspacing="0" cellpadding="0">' +
                        '  <tr><td align="center" height="25"><img src="#{img_up}" id="#{name}_up" style="display:none;" /></td></tr>' +
                        '  <tr><td><div id="#{name}_content" style="height:'+height+'px; overflow:hidden;"></div></td></tr>' +
                        '  <tr><td align="center" height="25"><img src="#{img_down}" id="#{name}_down" style="display:#{display};" /></td></tr>' +
                        '</table>';
             var parser = { name: elem,
                            pages: json.totalPages,
                            img_up: json.imgPath+'/arrow_up.jpg',
                            img_down: json.imgPath+'/arrow_down.jpg',
                            display: showNext };
             var fHeight = height + 40;

             $(elem).setStyle('height:'+fHeight+'px;');
             $(elem).update(new Template(html).evaluate(parser)); // parse content..
             $(elem+'_up').observe('click', function(e) { flickPhotos(elem, 'up', num, p); });
             $(elem+'_down').observe('click', function(e) { flickPhotos(elem, 'down', num, p); });

             flickPhotos(elem, 'down', num, p);
          }
       }
    });
} // getPhotos


function flickPhotos (elem, direction, num, p) {
    var first, last, page, loadAx;
    var curr  = parseInt($F(elem+'_currentPage'));
    var total = parseInt($F(elem+'_totalPage'));

    if (direction == 'up') {
       page  = curr - 1;
       first = (page == 1) ? true : false;
    } else if (direction == 'down') {
       page = curr + 1;
       last = (page == total) ? true : false;
    } else {
       return;
    }

    if (first) { // first page hide up button..
       $(elem+'_up').hide();
    } else if (last) { // last page hide down button..
       $(elem+'_down').hide();
    }
    if (page == 2) {
       $(elem+'_up').show();
    } else if (page == (total - 1)) {
       $(elem+'_down').show();
    }


    var currCont = elem+'_p'+curr;
    var nextCont = elem+'_p'+page;

    if (curr != 0) { // make current page content disappear..
       (direction == 'up') ? Effect.Fade(currCont, {duration:0.3}) : Effect.SlideUp(currCont, {duration:0.5});
       //$(currCont).hide();
    }
    if (!$(nextCont) || !$(nextCont).innerHTML) { // next item has not loaded.. ask AJAX for help :p
       var loadAx = true;
       var newDiv = '<div id="'+nextCont+'"></div>';

       if (curr == 0) {
          $(elem+'_content').insert(newDiv);
       } else if (direction == 'up') {
          $(elem+'_content').insert(newDiv, 'top');
       } else {
          $(elem+'_content').insert(newDiv);
       }
    }

    (direction == 'up') ? Effect.SlideDown(nextCont, {duration:0.5}) : Effect.Appear(nextCont, {duration:2});
    //$(nextCont).show();
    $(elem+'_currentPage').value = page;

    if (!loadAx) { // process end here..
       return;
    }


    var param = (typeof(p) == 'undefined') ? {} : p;
    var hash  = $H({option:'com_photo', task:'x_feed', tag:elem, limit:num, view:page});
    hash.update(param);

    new Ajax.Request(_absolutePath+'/ajax.lnk.php', {
       method: 'get',
       parameters: hash.toObject(),
       //onLoading: function() { $(elem).update('loading..') },
       onFailure: function() { $(elem).update('error'); },
       onSuccess: function(transport, json) {
          var text    = transport.responseText;
          var scripts = text.extractScripts();

          if (scripts.length > 0) { scripts.map(function(script) { eval(script); }); }
          if (json && (json.status == -1 || json.status == 0)) { $(elem).update(json.message); }
          else if (json && json.status == 1) {
             $(nextCont).update(text);
          }
       }
    });
} // flickPhotos