// PROTOTYPES

if (window.Node && Node.prototype && !Node.prototype.contains) {
	Node.prototype.contains = function (arg) {
		return !!(this.compareDocumentPosition(arg) & 16);
	}
};

// KERNEL

function $(elm) {
  if(arguments.length > 1) {
    for(var i = 0, elms = []; i < arguments.length; i++) {elms.push($(arguments[i]));}
    return elms;
  }
  if(typeof elm == 'string') { return document.getElementById(elm); }
  return null;
};

function init() {
  Context.Init();
  Dialog.Init();
};

// SCREEN

var Screen = {
  ScrollOffset: function() {
      var left = 0, top = 0;
      if( typeof(window.pageYOffset) == 'number' ) {
        left = window.pageXOffset;
        top = window.pageYOffset;
      } else if(document.body && (document.body.scrollLeft || document.body.scrollTop)) {
        left = document.body.scrollLeft;
        top = document.body.scrollTop;
      } else if(document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)) {
        left = document.documentElement.scrollLeft;
        top = document.documentElement.scrollTop;
      }
      return { 'left': left, 'top': top };
  },
  Window: function() {
      var width = (window.innerWidth ? window.innerWidth : document.documentElement.clientWidth);
      var height = (window.innerHeight ? window.innerHeight : document.documentElement.clientHeight);
      return { 'width': width, 'height': height };
  },
  Center: function(obj) {
      var window = this.Window();
      var box_width = obj.clientWidth;
      var box_height = obj.clientHeight;
      var left = (window.width > box_width ? (window.width / 2) - (box_width / 2) : 0);
      var top = (window.height > box_height ? (window.height / 2) - (box_height / 2) : 0);
      return { 'left': left, 'top': top };
  }
};

// CONTEXT

function Context() {
  var _ = this;
  _.body = null;
  _.Init = function() {
      document.write('<div id="context" onmouseout="Context.Hide(event)"></div>');
      _.body = $('context');
  };
  _.Show = function(e, html) {
      var e = e || window.event;
      var window = Screen.Window();
  		var scroll = Screen.ScrollOffset();
      var x = e.clientX + scroll.left;
      var y = e.clientY + scroll.top;
      _.body.innerHTML = html;
      var body = { width: $('context').clientWidth, height: $('context').clientHeight };
      x = (e.clientX > body.width) && (e.clientX + body.width > window.width) ? x - body.width + 5 : x - 5;
      y = (e.clientY > body.height) && (e.clientY + body.height > window.height) ? y - body.height + 5 : y - 5;
      with(_.body.style) {
        left = x + "px";
        top = y + "px";
        visibility = "visible";
      }
  };
  _.Hide = function(e) {
      var e = e || window.event;
      var to = e.relatedTarget || e.toElement;
      if(!_.body.contains(to)) _.body.style.visibility = 'hidden';
  };
};
var Context = new Context();

// DRAG

function Drag() {
  var _ = this;
  _.Area = null;
  _.Object = null;
  _.Offset = { x : null, y : null };
  _.Status = false;
  _.Init =
          function(area, obj) {
            _.Area = $(area);
            _.Object = $(obj);
            document.onmousedown = _.Handler;
          };
  _.Handler =
          function(e) {
            var e = e || window.event;
            var target = e.target != null ? e.target : e.srcElement;
            if (target == _.Area) {
              _.Status = true;
              _.Offset.x = e.clientX - parseInt(_.Object.style.left);
              _.Offset.y = e.clientY - parseInt(_.Object.style.top);
              document.onmousemove =
                    function(e) {
                      var e = e || window.event;
                      if (_.Status) {
                        _.Object.style.left = e.clientX - _.Offset.x + 'px';
                        _.Object.style.top = e.clientY - _.Offset.y + 'px';
                        return false;
                      }
                    };
              document.onmouseup =
                    function(e) {
                      document.onmousemove = null;
                      document.onmouseup = null;
                      _.Status = false;
                    };
              return false;
            }
          };
};
var Drag = new Drag();

// DIALOG

function Dialog() {
  var _ = this;
  _.back = null;
  _.window = null;
  _.head = null;
  _.body = null;
  _.control = null;
  _.Init = function() {
      var html =
          '<form id="dialog" name="dialog" action="" method="post">' +
            '<div id="dialog_back"></div>' +
            '<div id="dialog_window">' +
              '<div id="dialog_head"></div>' +
              '<div id="dialog_body"></div>' +
              '<div id="dialog_control"></div>' +
            '</div>' +
          '</form>';
      document.write(html);
      _.back = $('dialog_back');
      _.window = $('dialog_window');
      _.head = $('dialog_head');
      _.body = $('dialog_body');
      _.control = $('dialog_control');
      window.onresize = Dialog.Center;
  };
  _.Run = function(settings) {
      if(!settings) return;
      _.head.innerHTML = '<a href="javascript:Dialog.Hide()" title="Uždaryti langą">X</a>' + (settings.title || '');
      _.body.innerHTML = settings.body || '';
      //alert(_.body.innerHTML);
      _.control.innerHTML = (settings.control || '') + '<input type="button" class="button" value="Atšaukti" onclick="Dialog.Hide();" />';
      if(settings.size) _.window.style.width = settings.size.width || '';
      if(settings.size) _.body.style.height = settings.size.height || '';
      _.Show();
  };
  _.Center = function() {
      if(!Screen) return;
      var center = Screen.Center(_.window);
      var scroll = Screen.ScrollOffset();
      _.back.style.width = document.body.scrollWidth + 'px';
      _.back.style.height = document.body.scrollHeight + 'px';
      _.window.style.left = center.left + scroll.left + 'px';
      _.window.style.top = center.top + scroll.top + 'px';
      return;
  };
  _.DrawBack = function() {
      _.back.style.height = document.body.scrollHeight + 'px';
      _.back.style.width = document.body.scrollWidth + 'px';
      return;
  };
  _.Show = function() {
      _.Center();
      _.window.style.visibility = 'visible';
      _.back.style.visibility = 'visible';
      if(Drag) Drag.Init('dialog_head', 'dialog_window');
      $('dialog').focus();
      return;
  };
  _.Hide = function() {
      _.back.style.visibility = 'hidden';
      _.window.style.visibility = 'hidden';
      _.head.innerHTML = _.body.innerHTML = _.control.innerHTML = '';
      return;
  };
  _.Load = {
      Video: function(value) {
          if(!$('dialog_body')) return;
          var settings = {
              title: 'VIDEO',
              body:
                  '<object class="video" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="500" height="411">' +
                    '<param name="movie" value="http://www.youtube.com/v/' + value + '" /></param>' +
                    '<embed src="http://www.youtube.com/v/' + value + '" type="application/x-shockwave-flash" width="500" height="411"></embed>' +
                  '</object>',
              control: '',
              size: { width: '500px' }
          };
          Dialog.Run(settings);
          $('dialog_body').style.paddingTop = '0';
      }
  };
}
var Dialog = new Dialog();

// CAPTCHA

function Captcha() {
  var _ = this;
  _.Refresh = function() { $('captcha').src = VARS.path.captcha + '/inc.captcha.php?' + Math.random(); }
}
var Captcha = new Captcha();

var __ = {
  Nothing: function() { return; },
  Preview: function(url) { window.open(url, '', 'width=850, height=650, scrollbars=no, menubar=no, resizable=yes, toolbar=no, location=no, status=no'); },
  Print: function(id, name) { window.open(VARS.URL + '/print.php?id=' + id + '&name=' + name, '', 'width=800, height=800, scrollbars=yes, menubar=yes, resizable=yes, toolbar=yes, location=no, status=no'); },
  FormSubmit: function() { $('frm').submit(); return false; }
};

// CONTENT

function Content() {
  var _ = this;
  _.Table =
      		function(arr, id, title) {
      			var html = '';
      		  html+=
                  '<table class="templtable" style="border-color:black;">' +
      		          '<tr><td colspan=2 class="tablepav" style="width:30%">' + title + '</td></tr>';
      			var length = 1;
      			for(var row in arr) {
      				html+= '<tr class="' + (length%2 != 0 ? 'tr0' : 'tr1' ) + '">';
      				length++;
      				var columns = arr[row];
      				for (var col in columns) {
      					if(columns[col] == 'x') html += '<td ' + (col == 'col1' ? "width=30%" : "") + '><img src="'+ VARS["path"]["img"] +'/tbl.x.jpg" width="14px" height="14px"></td>';
					      else if(columns[col]=='v') html += '<td ' + (col == 'col1' ? "width=30%" : "") + '><img src="'+ VARS["path"]["img"] +'/tbl.v.jpg" width="14px" height="14px"></td>';
					      else html+= '<td ' + (col == "col1" ? "width=45%" : "") + ' style="text-align:left;">' + columns[col]  + '</td>';
      				}
      				html+='</tr>';
      			}
      		  html+= '</table>';
      		  $('container_' + id).innerHTML = html;
      		};
  _.Links =
          function(links, bid, mod) {
            html = '';
            var ico = '';
            var target;
            for(var i in links) {
              target = (links[i]['type'] == 'file' || links[i]['type'] == 'exlink' ? '_blank' : '_self');
              if(mod == 'exin') {
                switch(links[i]['type']) {
                  case 'file': ico = 'exin.ico.pdf.gif'; break;
                  case 'image': ico = 'exin.ico.image.gif'; break;
                  case 'page': ico = 'exin.ico.page.gif'; break;
                  case 'exlink': ico = 'exin.ico.web.gif'; break;
                }
                html += '<img style="float:left; margin:5px 5px 0px 0px" src="' + VARS['path']['img'] + '/' + ico + '" alt="" /><a href="' + links[i]['path'] + '" target="' + target + '">' + links[i]['name'] + '</a>';
              } else if(mod == 'lnk') {
                html += '<table class="lnk_box"><tr><td><a href="' + links[i]['path'] + '" target="' + target + '">' + links[i]['name'] + '</a></td></tr></table>';
              }
            }
            $('exin_links_' + bid).innerHTML = html;
          }
};
var Content = new Content();

// IMAGES

function BlockImg() {
  var _ = this;
  
  _.BID = null;
  _.Blank = VARS['path']['img'] + '/ico.img.blank.gif';
  _.Zoom = VARS['path']['img'] + '/ico.img.zoom.gif';
  _.List = new Array();
  _.Active = new Array();
  _.Style = new Array();
  
  _.Init =
          function(bid, style, input) {
            if(!bid || !input) return;
            _.BID = bid;
            _.List = input;
            _.Style = style;
            _.HTML.Main();
            for(var name in _.List) {
              if(_.Key.Count(_.List[name]) > 1) {
                switch(_.Style['img_size']) {
                  case 'S': _.HTML.List.Small(name); break;
                  case 'L': _.HTML.List.Large(name); break;
                }
              }
              _.Switch(name);
            }
          };
  _.Key = {
          Count:
                function(arr) {
                  var i = 0;
                  for(var x in arr) i++;
                  return i;
                },
          First:
                function(name) {
                  for(var key in _.List[name]) return key;
                }
  };
  _.Switch = 
          function(name, i) {
            var src = _.Blank;
            var href = 'javascript:__.Nothing()';
            var target = '_self';
            if(_.Key.Count(_.List[name]) > 0) {
              if(!i) i = _.Key.First(name);
              src = _.List[name][i]['M'];
              href = _.List[name][i]['link']['type'] == 'zoom' ? 'javascript:__.Preview(\'' + _.List[name][i]['L'] + '\')' : _.List[name][i]['link']['href'];
              target = _.List[name][i]['link'] && (_.List[name][i]['link']['type'] == 'file' || _.List[name][i]['link']['type'] == 'exlink') ? '_blank' : '_self';
            }
            var old = _.Active[name] && _.Active[name]['item'] ? $(_.Active[name]['item']) : '';
            var item = $('list_' + _.BID + '_' + name + '_' + i);
            var image = $('itm_' + _.BID + '_' + name);
            var zoom = $('zoom_' + _.BID + '_' + name);
            var anchor = $('anc_' + _.BID + '_' + name);
            switch(_.Style['img_size']) {
              case 'S':
                if(old) old.className = 'blk_img_nbar_itm';
                if(item) item.className = 'blk_img_nbar_act';
              break;
              case 'L':
                if(old) old.className = 'blk_img_ibar_itm';
                if(item) item.className = 'blk_img_ibar_act';
              break;
            }
            if(image) image.src = src;
            if(zoom) zoom.src = _.List[name][i]['link']['type'] == 'zoom' ? _.Zoom : _.Blank;
            if(anchor) {
              anchor.href = href;
              anchor.target = target;
            }
            _.Active[name] = { id:i, item:(item?item.id:'') };
            return;
          };
  _.HTML = {
          Main:
                function() {
                  var html = '';
                  for(var name in _.List) {
                    if(_.Key.Count(_.List[name]) == 0) continue;
                    html +=
                          '<div class="' + (_.Style['img_blk'] ? _.Style['img_blk'] : '') + '">' +
                            '<a id="anc_' + _.BID + '_' + name + '" style="display:block"><img src="' + _.Blank + '" id="itm_' + _.BID + '_' + name + '" class="' + _.Style['img'] +  '_div" alt="" /><img id="zoom_' + _.BID + '_' + name + '" class="' + _.Style['img'] +  '_zoom" src="' + _.Blank + '" alt="" /></a>' +
                            '<div id="list_' + _.BID + '_' + name + '" class="' + _.Style['img'] + '_bar">&nbsp;</div>' +
                          '</div>';
                  }
                  if($('images_' + _.BID)) $('images_' + _.BID).innerHTML = html;
                },
          List: {
                Small:
                      function(name) {
                        var html = '';
                        var i = 1;
                        for(var id in _.List[name]) {
                          html += '<a id="list_' + _.BID + '_' + name + '_' + id + '" href="javascript:BlockImg[' + _.BID + '].Switch(\'' + name + '\', ' + id + ');" class="blk_img_nbar_itm">' + i + '</a>';
                          i++;
                        }
                        if($('list_' + _.BID + '_' + name)) $('list_' + _.BID + '_' + name).innerHTML = html;
                      },
                Large:
                      function(name) {
                        var html = '';
                        var i = 1;
                        for(var id in _.List[name]) {
                          html += '<a href="javascript:BlockImg[' + _.BID + '].Switch(\'' + name + '\', ' + id + ');"><img id="list_' + _.BID + '_' + name + '_' + id + '" class="blk_img_ibar_itm" src="' + _.List[name][id]['S'] + '" alt="Image" /></a>';
                          i++;
                        }
                        if($('list_' + _.BID + '_' + name)) $('list_' + _.BID + '_' + name).innerHTML = html;
                      }
          }
  };
};

// HELP

function Help() {
  var _ = this;

  _.Show = function(e, type) {
      if(!Context || !type || !$('help_' + type)) return;
      var e = e || window.event;
      Context.Show(e, $('help_' + type).innerHTML);
  };

};
var Help = new Help();

// USER

function User() {
  var _ = this;

  _.Logout = function() {
      if(!Dialog || !$('dialog')) return;
      $('dialog').action = VARS.path.user;
      var settings = {
          title: 'Išeiti iš sistemos',
          body:
              '<input type="hidden" name="mod" value="user" />' +
              '<input type="hidden" name="act" value="logout" />' +
              '<div>Ar tikrai norite išeiti iš sistemos?</div>',
          control: '<input type="submit" value="Išeiti" />',
          size: { width: '230px' }
      };
      Dialog.Run(settings);
      return;
  };

};
var User = new User();

// CART

function Cart() {
  var _ = this;

  _.Add = function(id) {
      if(!Dialog || !id) return;
      var settings = {
          title: 'Idėti prekę į krepšelį',
          body:
              '<input type="hidden" name="mod" value="cart" />' +
              '<input type="hidden" name="act" value="add" />' +
              '<input type="hidden" name="dat" value="' + id + '" />' +
              '<div>Ar tikrai norite įdėti pasirinktą prekę į krepšelį?</div>',
          control: '<input type="submit" value="Įdėti" />',
          size: { width: '250px' }
      };
      Dialog.Run(settings);
      return;
  };
  _.Remove = function(id) {
      if(!Dialog || !id) return;
      var settings = {
          title: 'Išimti prekę iš krepšelio',
          body:
              '<input type="hidden" name="mod" value="cart" />' +
              '<input type="hidden" name="act" value="remove" />' +
              '<input type="hidden" name="dat" value="' + id + '" />' +
              '<div>Ar tikrai norite išimti pasirinktą prekę iš krepšelio?</div>',
          control: '<input type="submit" value="Išimti" />',
          size: { width: '250px' }
      };
      Dialog.Run(settings);
      return;
  };

  _.Items = function(id) {
      if(!id || !$('shop_form') || !$('shop_act') || !$('shop_dat')) return;
      $('shop_act').value = 'items';
      $('shop_dat').value = id;
      $('shop_form').submit();
  };

  _.Quantity = function(id, unit) {
      if(!Dialog || !id || !$('shop_qua_' + id)) return;
      var str = ($('shop_max_' + id).value ? 'Prekės likutis sandėlyje: <strong>' + $('shop_max_' + id).value + ' ' + unit + '</strong><br />' : '');
      var settings = {
          title: 'Prekių kiekis',
          body:
              '<input type="hidden" name="mod" value="shop" />' +
              '<input type="hidden" name="act" value="quantity" />' +
              '<input type="hidden" name="shop[id]" value="' + id + '" />' +
              '<input type="hidden" name="shop[max]" value="' + $('shop_max_' + id).value + '" />' +
              '<div>' +
                str +
                'Prašome, įveskite norimą prekės kiekį: ' +
                '<input class="quantity" id="dialog_qua" type="text" name="shop[quantity]" value="' + $('shop_qua_' + id).value + '" maxlength="2" />' +
              '</div>',
          control: '<input type="submit" value="Keisti" />',
          size: { width: '320px' }
      };
      Dialog.Run(settings);
      $('dialog_qua').focus();
      return;
  };
  
  _.Delivery = function(obj) {
      if(!$('shop_form') || !$('shop_act')) return;
      $('shop_act').value = 'chmod';
      $('shop_form').submit();
  };
  
  _.Payment = function(mode) {
      if(!mode || !$('shop_pay_' + mode) || !$('shop_info_' + mode) || !$('shop_pay') || !$('shop_pay_dat')) return;
      var nodes = $('shop_pay').childNodes;
      for(var i=0; i<nodes.length; i++) {
        if(nodes[i].nodeType !== 1 || nodes[i].innerHTML == '') continue;
        nodes[i].className = 'label';
      }
      $('shop_pay_' + mode).className = 'label active';
      $('shop_pay_dat').innerHTML = $('shop_info_' + mode).innerHTML;
  }
  
  _.PayType = function(type) {
    if(!type || !$('pay_' + type)) return;
    $('pay_' + type).checked = true;
  }
  
  _.Info = function() {
      if(!Dialog) return;
      var settings = {
          title: 'Prekės užsakymas',
          body:
              '<div>Dėl šios prekės užsakymo prašome kreiptis tiesiogiai į Virklund Sport administracija telefonu Klaipėdoje <strong>+370 46 342400</strong> arba el. paštu <strong>virklund@virklund-sport.lt</strong></div>',
          size: { width: '300px' }
      };
      Dialog.Run(settings);
      return;
  }
  
  _.Closed = function() {
      if(!Dialog) return;
      var settings = {
          title: 'Parduotuvė uždaryta',
          body:
              '<div><strong>Parduotuvė yra laikynai uždaryta</strong></div><br />' +
              '<div>Dėl prekių užsakymo prašome kreiptis tiesiogiai į Virklund Sport administracija telefonu Klaipėdoje <strong>+370 46 342400</strong> arba el. paštu <strong>virklund@virklund-sport.lt</strong></div>',
          size: { width: '300px' }
      };
      Dialog.Run(settings);
      return;
  }

};
var Cart = new Cart();

