(function() { if(!window.$calculator) { $calculator = window.$calculator; } $c = $calculator = { // Информация о разработчике ;) info : { name : "Калькулятор услуг", version : "v.4.01b (Dynamic)", author : "Axwell IT", site : "http : //axwell.ru/" }, // Настройки скрипта settings : { pay : 40, // Средняя зп (*1000 рублей) persons : 1, // Кол-во человек в команде wmDays : 22, // Кол-во рабочих дней в месяц wDays : 5, // кол-во рабочих дней в неделю wHour : 8, // Кол-во рабочих часов в день Delay : 5, // Намеренная погрешность в сроках при расчете (изм. Дни) // Конвертор валют exchange : { usd : 23.3, // Курс доллара eur : 36.9, // Курс евро cur : "rub" // Текущая валюта }, // Настройки оформления и селекторов design : { res : "div#result", // Блок в который будет выведен результат html : "sup" } }, // Статичные массивы arr : { rub : ["рубль","рубля","рублей"], usd : ["доллар","доллара","долларов"], eur : ["евро","евро","евро"], days : ["день","дня","дней"], weeks : ["неделя","недели","недель"], months : ["месяц","месяца","месяцев"], }, // tObj : function() {return {months : 0,weeks : 0,days : 0};}, // Общие функции fn : { // Сброс всех чекбоксов и суммы reset : function() { $("input").each(function() { this.checked = false; this.value = ""; }); $($c.settings.design.res).html(""); $m = 0; }, // Спойлер spoiler : function() { var s = $c.settings.design.html for(var i=1;i<= $c.app.set.length;i++) { $("span#spoiler"+i).hide(); $('<'+s+'>?<'+s+'>').insertAfter('#el_'+i); } $("a.reveal").click(function() { if(this.innerHTML == " ? ") { $(this).html(" скрыть ") } else { $(this).html(" ? ") } $("span#spoiler"+this.id).toggle(1000); }); }, // Смена валюты в блоках exchange : function(curr) { var k; $("span.tosumm").each(function() { k = $c.math.doconvert( parseInt($c.math.doconvert( parseInt(this.innerHTML), $cur,"rub")),"rub",curr,1); $(this).html(k); }); $cur = curr; }, // Расчет общей стоимости по выбранным чекбоксам getMoneySumm : function() { var stat=0,num; $m = 0; $("span.tosumm").each(function() { num = this.id.substr(3); // Проверяем статус чекбокса switch( $('#ch_' + num).attr('checked') ? 1 : 0 ) { // выбран case 1 : $("#th_" + num).addClass("odd"); $m += parseInt(this.innerHTML); break; // не выбран case 0 : $("#th_"+num).removeClass("odd"); } }); //return $m; }, // Вывод инфы об общей стоимости и времени на работу docalc : function() { // Считаем сумму по чекбоксам $c.fn.getMoneySumm(); if($m >0) { var $mtxt; // Превращаем ее в текст if($cur=="rub") $mtxt = $a.str.num2word($m,$c.arr.rub,0); else if($cur=="eur") $mtxt = $a.str.num2word($m,$c.arr.eur); else if($cur=="usd") $mtxt = $a.str.num2word($m,$c.arr.usd); // Обновляем время разработки var t = $c.fn.parsedtime(); // Вывод на экран цены и времени $($c.settings.design.res).html( "

"+ ""+ "Стоимость проекта : "+$m+" ( "+$mtxt+" )"+ ""+ "

"+ "

"+ ""+ "Время разработки проекта : "+t.months+" "+t.weeks+" "+t.days+ ""+ "

" ); } else $calculator.fn.reset(); // Сброс }, // {дни, недели, месяцы} parsedtime : function() { var a = $c.math.payperhour(); // Зп в час var t = $c.math.totaltime(a); // общее время // Переводим в текст дни, недели, месяцы t.days =(t.days >0)?$a.str.num2word(t.days,$c.arr.days,0) : ""; t.weeks =(t.weeks >0)?$a.str.num2word(t.weeks,$c.arr.weeks,1) : ""; t.months=(t.months >0)?$a.str.num2word(t.months,$c.arr.months,0) : ""; return t; } }, // Немного математики.. math : { // Расчет зп в час payperhour : function() { return parseInt(($z*1000*$p)/($nm*$h)); }, // Расчет общего времени на работу totaltime : function(a) { var t = new $c.tObj(); // Переводим текущую валюту в рубли var m = parseInt($c.math.doconvert($m,$cur,"rub")); // по ним считаем общее кол-во дней t.days = Math.ceil((m/a)/$h); // Добавляемне добавлем погрешность if(m >=20000) t.days+=$del; // Считаем недели и месяцы while(t.days >=$nm) {t.days-=$nm;t.months++;} while(t.days >=$wd) {t.days-=$wd;t.weeks++;} return t; }, // Конвертор валют.(val,in,to) Рубли = Доллары / Евро и наоборот doconvert : function(v,i,t,s) { i=i.toUpperCase(); t=t.toUpperCase(); if(i==t)return v+" "+t; if(i=="USD"||t=="USD") k=$usd; if(i=="EUR"||t=="EUR") k=$eur; if(i=="RUB") r = Math.round(v/k); else if(t=="RUB") r = Math.round(v*k); if(s) r+=" "+t; return r; } }, // Головная часть скрипта app : { /* Описание услуг * Описание : ..., * Подсказка : ..., * Цена : ... */ set : [ {d : "Система управления контентом", s : "Но про упорядоченные списки, это уже боян, скажем пару слов о неупорядоченных списках, о неиспользовании полезных html-тэгов и микроформатах. Их глубокое рассмотрение выходит за рамки этой статьи, я лишь приведу примеры «хорошо» и «плохо»."+ "Предметом бухгалтерского учета в обобщенном виде выступает хозяйственная деятельность предприятия с точки зрения системы учета ресурсов и результатов финансовой и хозяйственной деятельности предприятия…", p : 15000 }, {d : "Система управления контентом", s : "", p : 10000 }, {d : "Система управления контентом", s : "* Я мабилко и гружу непонятную картинку ужатую до нечитаемого размера;"+ "* Я принтер и зря засоряю лист бумаги картинками;"+ "* Это лишний презентационный мусор в коде для поисковиков, для тех кто будет поддерживать ваш код (вы не поменяете картинку только из css, придется лезть в шаблоны, доступ к которым может быть например только у программеров)", p : 5000 }, {d : "Система управления контентом", s : "", p : 9000 } ], // Статичная часть страницы static : ""+ "
"+ ""+ "
"+ ""+ ""+ ""+ ""+ "
"+ "

Сброс

"+ "

Цена в долларах

"+ "

Цена в евро

"+ "

Цена в рублях

"+ "
"+ "
"+ "
"+ "
" +"", // Запуск скрипта run : function() { // Генерим тело страничк $("body").html($calculator.app.static); // Заголовок document.title = $c.info.name; var info = $c.info.name+" "+$c.info.version+" © " info += ""+$c.info.author;+"" $("div#header").html("

"+info+"

"); // Проверка на существование описания услуг if(!$calculator.app.set) { $("#options").html("

Описания услуг отсутвуют!

") return; } // Поехал вывод var price,n,spoiler; for(var i=0;i< $c.app.set.length;i++) { n = i + 1; // Прайс switch(($c.app.set[i].p)?1 : 0) { case 1 : price = $c.math.doconvert($calculator.app.set[i].p,$cur,"rub",1); break; case 0 : price = "" } // Спойлер switch(($c.app.set[i].s!="" && $c.app.set[i].s)?1 : 0) { case 1 : spoiler = "
"+$c.app.set[i].s+"
"; break; case 0 : spoiler = ""; } // Добавляем блоки $(""+ ""+ // Описание ""+ $calculator.app.set[i].d + // Прайс " "+ price + "" + spoiler + ""+ // Чекбокс ""+ ""+ ""+ "" +"" ).appendTo("#options"); } $calculator.fn.spoiler(); // Раскрашиваем их //$("div : nth-child(odd)").addClass("odd"); } } }; // Пачка глобальных ременных if($calculator.settings) { $z = $calculator.settings.pay; $p = $calculator.settings.persons; $h = $calculator.settings.wHour; $m = $calculator.settings.money; $nm = $calculator.settings.wmDays; $wd = $calculator.settings.wDays; $del = $calculator.settings.Delay; $usd = $calculator.settings.exchange.usd; $eur = $calculator.settings.exchange.eur; $cur = $calculator.settings.exchange.cur; } else alert("Отсутствуют настройки скрипта!!"); })();