if(typeof console != 'object'){
console = {};
}
if(typeof console.log != "function"){
console.log = function(){};
}
var firano = {};
firano.framework = {
protocol: (document.location.protocol == "https:" ? "https://" : "http://"),
getElementsByClassName: function(className, scope){
var ret = [];
if (typeof scope == 'undefined') scope = document;
var elems = scope.getElementsByTagName('*'), i;
for (i in elems) {
if (String(Number(i)) === i && elems.hasOwnProperty(i)) {
if((' ' + elems[i].className + ' ').indexOf(' ' + className + ' ') > -1) {
ret.push(elems[i]);
}
}
}
return ret;
},
empty: function(obj) {
if (typeof obj == 'undefined' || obj === null || obj === '' || obj === '0') return true;
if (typeof obj == 'number' && (isNaN(obj) || obj === 0)) return true;
if (obj instanceof Array && obj.length === 0 ) return true;
if (obj instanceof Date && isNaN(Number(obj))) return true;
return false;
},
clear: function(str) {
return str
.replace(/
/gi, '')
.replace(/(<[^>\/]+>[^<]*<\/[^>]+>|<[^>\/]+\/>)/gi, '')
.replace(/(<[^>\/]+>[^<]*<\/[^>]+>|<[^>\/]+\/>)/gi, '')
.replace(/(<[^>\/]+>[^<]*<\/[^>]+>|<[^>\/]+\/>)/gi, '')
;
},
clear_int: function(str) {
return parseInt(this.clear(str).replace(/[\ \,]/g, ''));
},
stringify: function(data, type) {
return this.json_encode(data);
},
json_encode: function(mixed_val) {
try {
var value = mixed_val;
var quote = function (string) {
var escapable = /[\\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
var meta = { // table of character substitutions
'\b': '\\b',
'\t': '\\t',
'\n': '\\n',
'\f': '\\f',
'\r': '\\r',
'"': '\\"',
'\\': '\\\\'
};
escapable.lastIndex = 0;
return escapable.test(string) ? '"' + string.replace(escapable, function (a) {
var c = meta[a];
return typeof c === 'string' ? c : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
}) + '"' : '"' + string + '"';
};
var str = function (key, holder) {
var gap = '';
var indent = ' ';
var i = 0; // The loop counter.
var k = ''; // The member key.
var v = ''; // The member value.
var length = 0;
var mind = gap;
var partial = [];
var value = holder[key];
// If the value has a toJSON method, call it to obtain a replacement value.
if (value && typeof value === 'object' && typeof value.toJSON === 'function') {
value = value.toJSON(key);
}
// What happens next depends on the value's type.
switch (typeof value) {
case 'string':
return quote(value);
case 'number':
// JSON numbers must be finite. Encode non-finite numbers as null.
return isFinite(value) ? String(value) : 'null';
case 'boolean':
case 'null':
// If the value is a boolean or null, convert it to a string. Note:
// typeof null does not produce 'null'. The case is included here in
// the remote chance that this gets fixed someday.
return String(value);
case 'object':
// If the type is 'object', we might be dealing with an object or an array or
// null.
// Due to a specification blunder in ECMAScript, typeof null is 'object',
// so watch out for that case.
if (!value) {
return 'null';
}
if ((this.PHPJS_Resource && value instanceof this.PHPJS_Resource) || (window.PHPJS_Resource && value instanceof window.PHPJS_Resource)) {
throw new SyntaxError('json_encode');
}
// Make an array to hold the partial results of stringifying this object value.
gap += indent;
partial = [];
// Is the value an array?
if (Object.prototype.toString.apply(value) === '[object Array]') {
// The value is an array. Stringify every element. Use null as a placeholder
// for non-JSON values.
length = value.length;
for (i = 0; i < length; i += 1) {
partial[i] = str(i, value) || 'null';
}
// Join all of the elements together, separated with commas, and wrap them in
// brackets.
v = partial.length === 0 ? '[]' : gap ? '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' : '[' + partial.join(',') + ']';
gap = mind;
return v;
}
// Iterate through all of the keys in the object.
for (k in value) {
if (Object.hasOwnProperty.call(value, k)) {
v = str(k, value);
if (v) {
partial.push(quote(k) + (gap ? ': ' : ':') + v);
}
}
}
// Join all of the member texts together, separated with commas,
// and wrap them in braces.
v = partial.length === 0 ? '{}' : gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' : '{' + partial.join(',') + '}';
gap = mind;
return v;
case 'undefined':
// Fall-through
case 'function':
// Fall-through
default:
throw new SyntaxError('json_encode');
}
};
// Make a fake root object containing our value under the key of ''.
// Return the result of stringifying the value.
return str('', {
'': value
});
} catch (err) { // Todo: ensure error handling above throws a SyntaxError in all cases where it could
// (i.e., when the JSON global is not available and there is an error)
if (!(err instanceof SyntaxError)) {
throw new Error('Unexpected error type in json_encode()');
}
this.php_js = this.php_js || {};
this.php_js.last_error_json = 4; // usable by json_last_error()
return null;
}
},
load: function load(url, callback) {
var xhr;
if(typeof XMLHttpRequest !== 'undefined') xhr = new XMLHttpRequest();
else {
var versions = ["MSXML2.XmlHttp.5.0",
"MSXML2.XmlHttp.4.0",
"MSXML2.XmlHttp.3.0",
"MSXML2.XmlHttp.2.0",
"Microsoft.XmlHttp"]
for(var i = 0, len = versions.length; i < len; i++) {
try {
xhr = new ActiveXObject(versions[i]);
break;
}
catch(e){}
} // end for
}
ensureReadiness = function () {
if(xhr.readyState < 4) {
return;
}
if(xhr.readyState === 4) {
callback(xhr);
}
}
xhr.onreadystatechange = ensureReadiness;
xhr.open('GET', url, true);
xhr.send('');
},
getAllParams: function() {
var params = {};
if (location.search) {
var parts = location.search.substring(1).split('&');
for (var i = 0; i < parts.length; i++) {
var nv = parts[i].split('=');
if (!nv[0]) continue;
params[nv[0].toLowerCase()] = nv[1] || true;
}
}
return params;
},
getParam: function(name, def) {
def = def || '';
return this.getAllParams()[name] || def;
}
};
firano.basket = function(obj) {
return firano.saveBasket(firano.getBasket(),firano.getOrderId(), obj);
}
firano.form = function() {
return firano.showForm(firano.getBasket(),firano.getOrderId());
}
firano.getUser = function() {
var ret = {};
var userdata = firano.framework.getElementsByClassName('userdata_item');
if (typeof userdata == 'undefined') {
return ret;
}
var name,middle,surname,email,phone_mobile;
for (key in userdata) {
if (String(Number(key)) === key && userdata.hasOwnProperty(key)) {
f = firano.framework;
if(document.getElementsByClassName('userdata_item_name').length != 0) {
ret['name'] = f.clear(f.getElementsByClassName('userdata_item_name', userdata[key])[0].innerHTML);
}
if(document.getElementsByClassName('userdata_item_middle').length != 0) {
ret['middle'] = f.clear(f.getElementsByClassName('userdata_item_middle', userdata[key])[0].innerHTML);
}
if(document.getElementsByClassName('userdata_item_surname').length != 0) {
ret['surname'] = f.clear(f.getElementsByClassName('userdata_item_surname', userdata[key])[0].innerHTML);
}
if(document.getElementsByClassName('userdata_item_email').length != 0) {
ret['email'] = f.clear(f.getElementsByClassName('userdata_item_email', userdata[key])[0].innerHTML);
}
if(document.getElementsByClassName('userdata_item_phone_mobile').length != 0) {
ret['phone_mobile'] = f.clear_int(f.getElementsByClassName('userdata_item_phone_mobile', userdata[key])[0].innerHTML);
}
}
}
var counter = 0;
for (var i in ret) {
counter++;
}
if(counter > 0) {
return ret;
} else {
return false;
}
};
firano.getBasket = function() {
var ret = [];
var basket = firano.framework.getElementsByClassName('basket_item');
if (typeof basket == 'undefined') {
return ret;
}
var item = {};
var key,name,sum,price,count;
for (key in basket) {
if (String(Number(key)) === key && basket.hasOwnProperty(key)) {
f = firano.framework;
name = f.clear (f.getElementsByClassName('basket_item_name', basket[key])[0].innerHTML);
category= f.clear_int(f.getElementsByClassName('basket_item_category',basket[key])[0].innerHTML);
price = f.clear_int(f.getElementsByClassName('basket_item_price', basket[key])[0].innerHTML);
sum = f.clear_int(f.getElementsByClassName('basket_item_sum', basket[key])[0].innerHTML);
count = f.clear_int(f.getElementsByClassName('basket_item_count', basket[key])[0].innerHTML);
brand = f.clear (f.getElementsByClassName('basket_item_brand', basket[key])[0].innerHTML);
model = f.clear (f.getElementsByClassName('basket_item_model', basket[key])[0].innerHTML);
if (firano.framework.empty(count)) {
count=f.clear_int(f.getElementsByClassName('basket_item_count', basket[key])[0].value);
}
if (firano.framework.empty(brand)) {
console.log('не хватает бренда для элемента корзины');
} else if (firano.framework.empty(model)) {
console.log('не хватает модели для элемента корзины');
} else if (firano.framework.empty(name) || firano.framework.empty(category) || firano.framework.empty(price) || firano.framework.empty(count) || firano.framework.empty(sum)) {
// не хватает данных, это элемент корзины пропускаем и пишем в лог.
console.log('не хватает данных для элемента корзины');
console.log({ price: price, count: count, sum: sum });
} else {
ret.push ({ name: name, category: category, price: price, count: count, sum: sum, brand: brand, model: model });
}
}
}
return ret;
};
firano.getOrderId = function() {
if (document.getElementById('order_id')) {
return firano.framework.clear(document.getElementById('order_id').innerHTML);
} else {
return -1;
}
}
firano.basketSaved = false;
firano.saveBasket = function(basket, order_id, obj) {
console.log("эту функцию использовать нельзя, устарело");
if (!firano.basketSaved) {
var json = firano.framework.stringify(basket, 'basket');
var data = encodeURIComponent(json);
var rand = Math.floor(Math.random() * 9999);
var src = firano.framework.protocol + 'firano.ru/embedded/basket_save/' + rand + '?domain=' + window.location.hostname + '&order_id=' + order_id + '&data=' + data;
firano.framework.load(src, function(){
firano.basketSaved = true;
obj.click();
});
return false;
} else {
return true;
}
};
firano.showForm = function(data, signature) {
var data = encodeURIComponent(data);
var d = document.createElement('div');
d.innerHTML = '