// Global variables
var scrollEngaged = false;
var scrollInterval;
var scrollBars = new Array();
var PhorScrolls = new Array();

window.onload = function(e) { //читаем куку для стиля, не догоняю пока, как их по разделам раскидать...
                                // пока изменеия одного цвета в школе меняет цвет с тем же номером в студии.
  var cookie = readCookie("style");
  var title = cookie ? cookie : getPreferredStyleSheet();
  setActiveStyleSheet(title);
  initScrollers(); // и инициализируем скроллеры и галереи, если есть
  var contact_form = document.getElementById('contact_form');
  if( contact_form ) {
          try {
                contact_form.addEventListener('submit', form_check, false);
        } catch(e) {
                contact_form.obsumbit = form_check;
        }
  }
var cr = document.getElementById('copyright');
cr.style.visibility = 'visible';
  setCopyright();
}
//window.onload = initScrollers;

window.onunload = function(e) { // кидаем куку со стилем при выходе со страницы
  var title = getActiveStyleSheet();
  createCookie("style", title, 365);
}

function form_check(e) {
        var error_message = '';
        var FIELDS = {
                'username'        : 255,
                'subject'        : 255,
                'usermail'        : 255,
                'mailbody'        : 10240
        };
        for (var fld in FIELDS) {
                var field = document.getElementById(fld);
                if( fld == 'username' ) {
                        if ( ! field.value ) {
                                error_message += 'Вы не написали своё имя!' + "\n";
                        } else if( field.value.length > FIELDS[fld] ) {
                                error_message += 'Количество символов в поле "Имя" не должно превышать ' + FIELDS[fld] + "\n";
                        }
                }
                if( fld == 'subject' ) {
                        if ( ! field.value ) {
                                error_message += 'Вы не написали тему сообщения!' + "\n";
                        } else if( field.value.length > FIELDS[fld] ) {
                                error_message += 'Количество символов в теме сообщения не должно превышать ' + FIELDS[fld] + "\n";
                        }
                }
                if( fld == 'usermail' ) {
                        if ( ! field.value ) {
                                error_message += 'Вы не написали обратный адрес! Напишите хоть что-нибудь, чтобы можно было вам ответить или позвонить.' + "\n";
                        } else if( field.value.length > FIELDS[fld] ) {
                                error_message += 'Количество символов Email  не должно превышать ' + FIELDS[fld] + "\n";
                        }
                }
                if( fld == 'mailbody' ) {
                                if( field.value && field.value.length > FIELDS[fld] ) {
                                error_message += 'Количество символов в тексте сообщения не должно превышать ' + FIELDS[fld] + "\n";
                        }
                }
        }
        if( error_message ) {
                alert(error_message);
                if( !e ) { var e = window.event; }
                if( e.preventDefault) { e.preventDefault(); }
                return false;
        }
}

function initScrollers() {
    initDHTMLAPI();
    // for text scrollers
    if (document.getElementById('outerWrapper0') && document.getElementById('innerWrapper0') && document.getElementById('lineup0') && document.getElementById('linedown0')){
    scrollBars[0] = new scrollBar('outerWrapper0', 'innerWrapper0', 'lineup0', 'linedown0');
    scrollBars[0].initScroll();
    }
    // for text scrollers
    if (document.getElementById('outerWrapper1') && document.getElementById('innerWrapper1') && document.getElementById('lineup1') && document.getElementById('linedown1')){
    scrollBars[1] = new scrollBar('outerWrapper1', 'innerWrapper1', 'lineup1', 'linedown1');
    scrollBars[1].initScroll();
    }
    // for preview pic & scrollers
    if (document.getElementById('Preview') && document.getElementById('PrevSetup') && document.getElementById('BigPhoto') && document.getElementById('PhotoNum')){
    ownPreview = document.getElementById('Preview');
    BigImages = document.getElementById('BigPhoto');
    PhotoNums = document.getElementById('PhotoNum');
    setUps = document.forms['PrevSetup'];
    ims = setUps.ims.value;
    prevPath = setUps.prevPath.value + '/';
    bigImgPath =  setUps.photoPath.value + '/';
    PhorScrolls[0] = new PhorScroll('Preview', 'PtoRight', 'PtoLeft', 'ItoRight', 'ItoLeft', 'ims', 'prevPath', 'bigImgPath', 'PhotoNum');
    PhorScrolls[0].createPreviews();

if (!currPic){var currPic = 1;}
    enLarge(currPic); // номер показываемой картинки, по-умолчанию - 1, т.е. первая.
                            // если ее умудриться передавать со ссылкой, то будет показана
                            // соответствующая картинка.
    }
}

////////////////////////// create preview gallary

function PhorScroll(ownPrevID, toRightID, toLeftID, predID, sledID, NumImgs, prevPath, photoPath, PhotoNum){
        this.index = PhorScrolls.length;
        this.prButton = document.getElementById(toRightID);
        this.plButton = document.getElementById(toLeftID);
        this.predButton = document.getElementById(predID);
        this.sledButton = document.getElementById(sledID);
        this.prButton.index = this.index;
        this.plButton.index = this.index;
        this.predButton.index = this.index;
        this.sledButton.index = this.index;
        this.NumImgs = NumImgs;
        this.prevPath = prevPath;
        this.photoPath = photoPath;
        this.createPreviews = createPreviews;
        this.prevClick = prevClick;
        this.PredSledClick = PredSledClick;
}

function createPreviews(){ // создаем превьюшки
        previewI = new Array();
        ImgArr = new Array(); //прелоадим картинки и в массив их! не помню на какой стадии это делал и не пойму нужно ли это
        for (var i = 1; i <= ims; i++) {
        ImgArr[i] = new Image();
        ImgArr[i].src = prevPath + i + '.jpg';
        }
        for (var m = 1; m <= ims; m++){ // создаем img
        var elemI = document.createElement('img');
        elemI.src = prevPath + m + '.jpg';
        elemI.width = 62;
        elemI.height = 62;
        elemI.alt = '';
        elemI.id = 'i' +m;

        ownPreview.appendChild(elemI); // и кладем их в специально отведенный для них див
        document.getElementById('i'+m).className = 'PrevImg';
        previewI[i] = document.getElementById('i'+m);
        previewI[i].onclick = prevClick;
        }
                // готовим кнопки
    this.plButton.onmousedown = PrevScrollClick;
    this.plButton.onmouseup = handleScrollStop;
    this.plButton.onmouseout = handleScrollStop;
    this.plButton.oncontextmenu = blockEvent;

    this.prButton.onmousedown = PrevScrollClick;
    this.prButton.onmouseup = handleScrollStop;
    this.prButton.onmouseout = handleScrollStop;
    this.prButton.oncontextmenu = blockEvent;

    this.predButton.onclick = PredSledClick;
    this.sledButton.onclick = PredSledClick;

}

function PrevScrollClick(evt){ // если кликнули по скроллам под кучей маленьких превьюшек
    evt = (evt) ? evt : event;
    var target = (evt.target) ? evt.target : evt.srcElement;
    var index = target.index;
    cource = (target.className == "arrowLeft") ? toLeft : toRight; // определяем направление и присваиваем cource соответствующую функцию
    scrollEngaged = true;
    // do single click scroll
    PrevScroll(index,cource);
    // trigger click-and-hold scrolling
    scrollInterval = setInterval('PrevScroll(' + index + ',' + cource + ')', 200); // задаем скорость и вместе с направлением передаем функции
    evt.cancelBubble = true;
    return false;

}
function PrevScroll(index,cource){ // запускаем скролл картинок
    var Pscroller = PhorScrolls[index];
    if (scrollEngaged) {
        return cource(); // тут выполняем toLeft || toRight
    } else {
       clearInterval(scrollInterval);
    }
}

function toRight(){ // сдвиг превьюшек вправо
        aaa = ownPreview.firstChild;
        zzz = ownPreview.lastChild;
        ownPreview.insertBefore(zzz, aaa);
}

function toLeft(){ // сдвиг превьюшек влево
        var elemB = document.createElement('br');
        ownPreview.appendChild(elemB);
        aaa = ownPreview.firstChild;
        zzz = ownPreview.lastChild;
        ownPreview.insertBefore(aaa, zzz);
        ownPreview.removeChild(elemB);
}


function prevClick(evt){ // щелчок по превьюшке
    evt = (evt) ? evt : event;
    var target = (evt.target) ? evt.target : evt.srcElement;
    var index = target.index;
    var regexp = /\d+/;
    xxx = regexp.exec(target.getAttribute('id'));
     enLarge(xxx); // увеличиваем соответствующую картинку
    evt.cancelBubble = true;
    return false;

}

function PredSledClick(evt){ // скролл увеличенных картинок
    evt = (evt) ? evt : event;
    var target = (evt.target) ? evt.target : evt.srcElement;
    var index = target.index;
    var regexp = /\d+/;
    xxx = regexp.exec(BigImages.firstChild.getAttribute('id'));
    var wView = (target.className == "arrowLeft") ? -1 : 1;
    var nextPhoto = parseInt(xxx)+parseInt(wView);
    if (nextPhoto <= 0) {
    nextPhoto = ims;
    }
    if (nextPhoto > ims) {
    nextPhoto = 1;
    }
     enLarge(nextPhoto);
    evt.cancelBubble = true;
    return false;

}
function enLarge(photoId) { // выводим увеличенную картинку
        var BIchilds = BigImages.childNodes; // попытка прибить картинку, если она есть, дабы не плодить их бесцельно
        if (BIchilds.length > 0) {
        for (h=0; h <= BIchilds.length; h++ ){
                BigImages.removeChild(BIchilds.item(h));
                }
        }
        var elemBI = document.createElement('img');
        elemBI.src = bigImgPath + photoId + '.jpg';
        elemBI.alt = '';
        elemBI.id = 'B'+photoId;
        BigImages.appendChild(elemBI);
        countImg(photoId,ims);

    return false;
}

function countImg(currImg,allImg){ // счетчик картинок (1 из ... и т.д.)
        var PhotoNumschilds = PhotoNums.childNodes; // прибиваем старый <span> с его содержимым
        if (PhotoNumschilds.length > 0) {                // т.к. какой-то из браузеров отказывался писАть
        for (h=0; h <= PhotoNumschilds.length; h++ ){        // в несозданный им элемент
                PhotoNums.removeChild(PhotoNumschilds.item(h));
                }
        }
        var elemS = document.createElement('span'); // создаем span и вписываем в него номер картинки и сколько их всего
        var txts = document.createTextNode(currImg + ' из ' + allImg);
        elemS.appendChild(txts);

        PhotoNums.appendChild(elemS);
    return false;
}

////////////////////////// Далее идет код из CookBook



// Read effective style property
function getElementStyle(elemID, IEStyleAttr, CSSStyleAttr) {
    var elem = document.getElementById(elemID);
    if (elem.currentStyle) {
        return elem.currentStyle[IEStyleAttr];
    } else if (window.getComputedStyle) {
        var compStyle = window.getComputedStyle(elem, "");
        return compStyle.getPropertyValue(CSSStyleAttr);
    }
    return "";
}

// Abstract object constructor function
function scrollBar(ownerID, ownerContentID, upID, dnID) {
    this.ownerID = ownerID;
    this.ownerContentID = ownerContentID;
    this.index = scrollBars.length;
    this.upButton = document.getElementById(upID);
    this.dnButton = document.getElementById(dnID);
    this.upButton.index = this.index;
    this.dnButton.index = this.index;
    this.ownerHeight = parseInt(getElementStyle(this.ownerID, "height", "height"));
    this.contentElem = document.getElementById(ownerContentID);
    this.contentElem.style.top = 0;
    this.contentElem.style.left = 0;
    this.contentElem.style.padding = "5px 5px 25px 5px";
//    this.contentFontSize = parseInt(getElementStyle(this.ownerContentID, "fontSize", "font-size"));
    this.contentFontSize = 20;
    this.contentScrollHeight = (this.contentElem.scrollHeight) ? this.contentElem.scrollHeight : this.contentElem.offsetHeight;
    this.initScroll = initScroll;
}

// Assign event handlers to actual scroll buttons
function initScroll() {
    this.upButton.onmousedown = handleScrollClick;
    this.upButton.onmouseup = handleScrollStop;
    this.upButton.onmouseout = handleScrollStop;
    this.upButton.oncontextmenu = blockEvent;

    this.dnButton.onmousedown = handleScrollClick;
    this.dnButton.onmouseup = handleScrollStop;
    this.dnButton.onmouseout = handleScrollStop;
    this.dnButton.oncontextmenu = blockEvent;

    var isIEMac = (navigator.appName.indexOf("Explorer") != -1 &&
        navigator.userAgent.indexOf("Mac") != -1);
    if (!isIEMac) {
//        document.getElementById("innerWrapper0").style.overflow = "hidden";
    }
}

/**************************
   Event Handler Functions
***************************/
// Turn off scrolling
function handleScrollStop() {
    scrollEngaged = false;
}

// Block contextmenu for Mac (holding down mouse button)
function blockEvent(evt) {
    evt = (evt) ? evt : event;
    evt.cancelBubble = true;
    return false;
}

// Initiate scrolling the content per the clicked button (up or down)
function handleScrollClick(evt) {
    var fontSize;
    evt = (evt) ? evt : event;
    var target = (evt.target) ? evt.target : evt.srcElement;
    var index = target.index;
    fontSize = scrollBars[index].contentFontSize;
    fontSize = (target.className == "lineup") ? fontSize : -fontSize;
    scrollEngaged = true;
    // do single click scroll
    scrollBy(index, parseInt(fontSize));
    // trigger click-and-hold scrolling
    scrollInterval = setInterval("scrollBy(" + index + ", " + parseInt(fontSize) + ")", 100);
    evt.cancelBubble = true;
    return false;
}

// Perform actual scroll singly or repeatedly (through setInterval( ))
function scrollBy(index, px) {
    var scroller = scrollBars[index];
    var elem = document.getElementById(scroller.ownerContentID);
    var top = parseInt(elem.style.top);
    var scrollHeight = parseInt(scroller.contentScrollHeight);
    var height = scroller.ownerHeight;
    if (scrollEngaged && top + px >= -scrollHeight + height && top + px <= 0) {
    shiftBy(elem, 0, px);
    } else {
        clearInterval(scrollInterval);
    }
}



/////////////////// Далее подставляем стили (http://www.alistapart.com/articles/alternate/)



function setActiveStyleSheet(title) {
   var i, a, main;
   for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
     if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")) {
       a.disabled = true;
       if(a.getAttribute("title") == title) a.disabled = false;
     }
   }
}
function getActiveStyleSheet() {
var i, a;
 for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
  if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title") && !a.disabled) return a.getAttribute("title");
  }
  return null;
}
 function createCookie(name,value,days) {
  if (days) {
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
  }
  else expires = "";
  document.cookie = name+"="+value+expires+"; path=/";
}
function readCookie(name) {
  var nameEQ = name + "=";
  var ca = document.cookie.split(';');
  for(var i=0;i < ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1,c.length);
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
  }
  return null;
}
function getPreferredStyleSheet() {
  var i, a;
  for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
    if(a.getAttribute("rel").indexOf("style") != -1
       && a.getAttribute("rel").indexOf("alt") == -1
       && a.getAttribute("title")
       ) return a.getAttribute("title");
  }
  return null;
}
