Array.prototype.remove = function (obj) {

    for (var i = 0; i < this.length; i++){
        if (obj==this[i])
            return (this.splice(i,1));
    }

    return false;
}

Array.prototype.have = function (obj) {

    for (var i = 0; i < this.length; i++){
        if (obj==this[i])
            return true;
    }

    return false;
}

Array.prototype.last = function (obj) {

    if (this.length>0)
        return this[this.length-1];
    else
        return null;

}

Array.prototype.add = function (obj) {

    if (false==this.have(obj))
        return this.push(obj);

}


function GetE(id) {
    return document.getElementById(id);
}


function GetCalendar(timestamp){



    if (window.XMLHttpRequest) {
        OrdReq = new XMLHttpRequest();
        }
    else if (window.ActiveXObject) { this.req
        OrdReq  = new ActiveXObject("Microsoft.XMLHTTP");
        }

    var url =  "/get_calendar.php"
    var send_string = "ts="+timestamp+"&dn="+current_dn;


    OrdReq.open("POST", url, true);
    OrdReq.onreadystatechange = GetCalendarResponse;

    OrdReq.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    OrdReq.setRequestHeader("Content-Length",send_string.length);

    OrdReq.send(send_string);

}

function GetCalendarResponse(){

  if (null==OrdReq)
    return false;

   if (OrdReq.readyState != 4)
    return false;


   if (OrdReq.readyState == 4) {

        if (OrdReq.status == 200) {

        GetE('calendar_table').innerHTML=OrdReq.responseText;
        //alert()
        return true;
         }
    }

}

function get_number_with_zeros(num) {

    if (num<10)
         return '0'+num;
     else
         return ''+num;


    
}


function PreloadById(id) {

    if (true==preloaded_ids.have(id))
         return;

    preloaded_ids.push(id);
    preloaded_pics.push(new Image());
    preloaded_pics.last().src=pics_arr[id];

    if (GetE('galleryBack').style.display!='none') {

        if (true==full_preloaded_ids.have(id))
             return;


        full_preloaded_ids.push(id);
        preloaded_pics.push(new Image());
        preloaded_pics.last().src=full_pics_arr[id];

    }

}


function PreloadPics() {

 if (total_pics==0)
     return;

 var next_num =  current_pic_num+1;

 if (next_num>total_pics-1)
        next_num=0;

 PreloadById(next_num)

 var prev_num =  current_pic_num-1;

 if (prev_num<0)
        prev_num=total_pics-1;;

 PreloadById(prev_num);

}


function UpdatePicText() {

  $('#pic_text').html($('#pictext'+current_pic_num).html());
  $('#gal_title').html($('#gal_title_hidden').html());
  

}

function UpdatePic() {

    GetE("item_pic").src = pics_arr[current_pic_num];

   if (GetE('galleryBack').style.display!='none')
        GetE("big_item_pic").src = full_pics_arr[current_pic_num];



    GetE("curr_pic_num").innerHTML = get_number_with_zeros(current_pic_num+1);

    UpdatePicText();
   

    PreloadPics();
}

function NextPic() {

    current_pic_num++;
    if (current_pic_num>total_pics-1)
        current_pic_num=0;
    UpdatePic();
  
}

function PrevPic() {
    current_pic_num--;
    if (current_pic_num<0)
        current_pic_num=total_pics-1;
    UpdatePic();
    
}

var pics_arr = new Array();
var full_pics_arr = new Array();

var preloaded_ids =  new Array();
var full_preloaded_ids = new Array();
var preloaded_pics = new Array();




var total_pics = 0;

var HiddenShowed = false;



function GetNextNode(n) {

if (GlobalVisitedChildsArr.have(n)) {

return n.parentNode;
}
var x = n.firstChild;

//alert('GetNextNode'+x);
if (GlobalVisitedChildsArr.have(x)) {

 //   alert('have');

    x = n.nextSibling; 
     if (null!=x)
         return x;

     x = n.parentNode;

     if (n!=x)
         return x;
     else
         return null;
}
    
else
    GlobalVisitedChildsArr.add(x)
    

 if (null!=x)
     return x;

 x = n.nextSibling;

 if (null!=x)
     return x;

 x = n.parentNode;

 if (n!=x)
     return x;
 else
     return null;


}


function get_nextsibling(n)
{
//


var x=GetNextNode(n);
//alert(x);
if (null==x)
      x = n.parentNode;

if (null==x) 
    return null;
//alert('b4 cycle');
//alert(x);
while (x.nodeType!=1)
  {//alert('in a cicle');
   x=GetNextNode(x);
   if (null==x)
       return null;

  }
return x;
}




function ShowHiddenText(link) {


GlobalVisitedChildsArr = new Array();


var ChangedNodes = new Array();


var CurrentNode = link;

while (null!=CurrentNode) {

   // alert('class '+CurrentNode.className);

    if ((CurrentNode.className == 'hidden_text')&&(ChangedNodes.have(CurrentNode)==false)){

        if ((CurrentNode.style.display !='none')&&(CurrentNode.style.display !=''))
            CurrentNode.style.display = 'none';
        else
            CurrentNode.style.display = 'block';

       ChangedNodes.add(CurrentNode);

    }


  CurrentNode = get_nextsibling(CurrentNode);

 // alert('it returned'+CurrentNode);
  if (null!=CurrentNode)
      {
        if (CurrentNode.nodeType==1)
            if ((CurrentNode.className=='listed')&&(CurrentNode!=link)) {
              CurrentNode = null;
            }

      }

}


//$('#heading1').nextAll('p.hidden_text').not("a.listed");


//    if (true==HiddenShowed) {
//
//        $('p.hidden_text').hide();
//        HiddenShowed = false;
//    }
//
//
//    else {
//        $('p.hidden_text').show();
//        HiddenShowed = true;
//    }



}

function OnPageLoad() {

//alert(2);
  $('a.listed').click (function () {
      ShowHiddenText(this); return false;}
      );

  PreloadPics();
}


function getDocHeight() {
    var D = document;
    return Math.max(
        Math.max(D.body.scrollHeight, D.documentElement.scrollHeight),
        Math.max(D.body.offsetHeight, D.documentElement.offsetHeight),
        Math.max(D.body.clientHeight, D.documentElement.clientHeight)
    );
}

function ShowFullGallery() {
    GetE("big_item_pic").src = full_pics_arr[current_pic_num];
    GetE('galleryBack').style.height = ''+getDocHeight()+'px';
    GetE('galleryBack').style.display = 'block';
    UpdatePicText();
}

function HideFullGallery() {

    GetE('galleryBack').style.display = 'none';
    UpdatePicText();
}


window.onload = OnPageLoad;
